반응형
void 포인터 개념 / 활용도
자료형이 정해지지 않은 포인터를 void 포인터라고 합니다.
기본적으로 C언어는 자료형이 다른 포인터끼리 메모리 주소를 저장하면 컴파일 에러가 뜨지만
void 포인터는 자료형이 정해지지 않기 때문에 모든 자료형의 포인터를 저장할 수 있습니다.
함수, void 포인터 다 가능합니다. 그래서 void 포인터는 범용 포인터라고 합니다.
int main()
{
int num1 = 10;
int *numPtr1 = &num1;
void *ptr; // void 포인터 선언
// 포인터 자료형이 달라도 컴파일 경고가 발생하지 않음
ptr = numPtr1; // void 포인터에 int 포인터 저장
// 포인터 자료형이 달라도 컴파일 경고가 발생하지 않음
numPtr1 = ptr; // int 포인터에 void 포인터 저장
return 0;
}
즉, 직접 자료형을 변환하지 않아도 암시적으로 자료형이 변환되는 방식입니다.
하지만 void 포인터는 자료형이 정해져 있지 않아 값이나 저장할 크기도 정해져 있지않습니다.
따라서 void 포인터는 역참조를 할 수 없습니다.
ptr = numPtr1; // void 포인터에 int 포인터 저장
printf("%d", *ptr); // void 포인터는 역참조할 수 없음. 컴파일 에러
void 키워드로는 변수를 선언할 수 없습니다.
void v1; // 컴파일 에러
그럼 역참조도, 변수 선언도 할 수 없는 void 포인터는 왜 사용할까요?
- 함수에서 다양한 자료형을 받아들일 때
- 함수의 반환 포인터를 다양한 자료형으로 된 포인터에 저장할 때
- 자료형을 숨기고 싶은 때
등 다양한 형태로 사용하고 있습니다.
-----------------------------------
-----------------------------------
반응형
'컴퓨터 공학 > C, C++' 카테고리의 다른 글
[ C ] 포인터 이해하기8_함수 포인터 쉽게 읽는 방법 (1573) | 2020.07.20 |
---|---|
[ C ] 포인터 이해하기7_함수 포인터란? 함수를 포인터에 저장할 수 있을까? (987) | 2020.07.20 |
[ C ] 포인터 이해하기5_값과 주소를 보호하는 const/const 읽는 방법 (387) | 2020.07.19 |
[ C ] 포인터 이해하기4_값에 의한 전달 vs 참조에 의한 전달/from 윤성우 or 포프 (389) | 2020.07.18 |
[ C ] 포인터 이해하기3_포인터와 배열의 차이 (400) | 2020.07.18 |
댓글