이 void **를 한번 분석해보자
1. 다차원 포인터
int * * pI
int * * pI 포인터 변수이다
int * * pI int* 의 주소를 담는 (int**) 형의 타입이다.
2. void 포인터
보이드 포인터 타입은 모든 포인터를 대입할수 있다.
(malloc 는 void*를 리턴한다.)
단 역참조와 정수와의 주소 offset 연산이 불가능하며 같은 void 포인터 타입과 비교연산(==)가 가능하다
(malloc 는 void*를 리턴한다.)
단 역참조와 정수와의 주소 offset 연산이 불가능하며 같은 void 포인터 타입과 비교연산(==)가 가능하다
void * vP;
int * nP;
....
*nP <--- O 가능 int포인터로써 역참조가 가능하다.
*vP <--- X 불가능 대체 무슨타입으로 역참조를 해야한단 말인가? 컴파일러는 판단할수 없다.
*nP 는 직접적으로int의 정수에 접근이 가능하지만
위의 두 포인터 변수의 차이는 void는 형을 알수없음으로 역참조를 할수 없는데 있다.
3.void **
앞에 두 개념을 숙지하고 아래의 개념을 다시 한번 생각해보았다.
앞에 두 개념을 숙지하고 아래의 개념을 다시 한번 생각해보았다.
왜 void**를 쓰는가?
char* 자체를 void*로 바꿔서 생각해 보자.
void** 는 void* 의 포인터 이므로 유연하게 모든 포인터를 void*로 받을수 있다.
const char* funcMsg = "hello World";
void func(void **something)
{
*something= (void *)funcMsg;
}
char * msg;
func((void**)&msg);
printf(msg);
댓글 없음:
댓글 쓰기