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자료형을 가리키고 있다는 것을 알려주는 형변환