C, C++
void 포인터
SuuuuuuuL
2018. 12. 21. 09:21
char ch= 'A';
int a = 25;
double b = 3.14;
char str[] ="korea";
int ary[3][4]={1,2,3,4,5,6};
void* vp;
vp = &ch;
printf("%c\n", *(char*)vp); //vp의 사용시점에 가리키는 값이 무엇인지 표기해줘야함
vp = str;
printf("%c\n", *((char*)vp+1));
printf("%s\n", (char*)vp);
vp = ary[0];
printf("%d\n", *(int*)vp);
vp = ary;
printf("%d\n", **(int(*)[4])vp);// 2차원 배열이므로 **두개붙여야..
printf("%d\n", **((int(*)[3])vp+1)+1);
vp = &b;
printf("%lf\n", *(double*)vp);
vp = &a;
printf("%d\n", *(int*)vp);
---결과값 ---------
A
o
korea
1
1
5
3.140000
25
------------------------------------
보이드 포인터는 어떤 자료형을 가리키는 주소값이어도 상관없이 다 받을 수 있지만, (차원에 상관없이 주소값이기만 하면 전부 ㅇㅋ)
그 값을 사용하려고 하는 시점에서는 정확하게 어떤 자료형을 가르키고 있는지 형변환이 필요하다.
예)
(char*)vp ==> vp가 char자료형을 가리키고 있다는 것을 알려주는 형변환