void**라는 타입이 void *타입을 가리키는 유도 타입이므로 void ** vpp; 변수를 선언할 때 vpp의 대상체는 임의의 대상체를 가리키는 void *타입이다
void* 와는 달리 void**는 가리키는 대상체의 타입이 void *로 분명히 정해져 있고 대상체의 크기(포인터4bit)도 명확하게 알고 있다. 따라서 vpp는 void형 포인터에 적용되는 규칙 대신 일반 포인터의 규칙이 적용된다. 임의 타입(double int char)의 포인터를 대입받을 수 없으며 반드시 void *형 변수의 번지만 대입받을 수 있다.
또한 대상체가 분명히 정해져 있으므로 *연산자로 대상체를 읽거나 변경할 수 있고 ++, --, +n 등의 연산으로 앞 뒤 요소로 이동할 수도 있으며 같은 void **타입끼리 대입, 비교, 뺄셈도 가능하다.
void *vp ;
void *av [5];
void **vpp ;
int i ,*pi=& i;
vpp = &vp ; // vvp(void 더블포인터 ) vp(void포인터) 가능
vpp = av ; // vvp(void 더블포인터 ) av(void포인터배열) 가능
vpp++; // 일반 포인터 와 같은 타입으로 승격 되어 서 가능
* vpp; // 가능
vpp=&pi ; // vvp(void 더블포인터 ) pi(int포인터) 불가능
** vpp; // 간접 참조 불가능
--------------------------------------------------------------------------
void 더블 포인터 사용 예;
임의의 대상체(Type)를 받아 대신 메모리 할당을 받게 하는 함수 를 만들때쓰임
void alloc (void** mem, size_t size)
{
* mem = malloc (size);
}
int main ()
{
double int char
void* vp ;
alloc(&vp ,sizeof( int));
*( int*)vp = 1234;
printf("%d \n" ,*(int*) vp);
free(vp );
return 0 ;
}
'Programming > C++' 카테고리의 다른 글
13. C++ 함수 오버로딩 (0) | 2017.12.20 |
---|---|
12. 파일 스트림 버퍼 기본 입,출 력 (0) | 2017.12.20 |
11. 스트림 과 버퍼 (0) | 2017.12.20 |
10. 함수 포인터 (0) | 2017.12.20 |
08. 동적 할당 더블포인터(다차원 배열) (0) | 2017.12.20 |
07. 함수 심화 포인터를 반환 하는 함수 , 가변인자 함수 (0) | 2017.12.20 |
06. 포인터 와 함수 , 더블포인터 (0) | 2017.12.20 |
05. _msize() 함수 동적할당후 크기 알아오기 (0) | 2017.12.20 |