int a = 3;

int *b = &a


라는 코드가 있다면 이걸 실행하면 메모리상에는


          메모리상 주소    |        저장된값

a        0x0000002                   3

b        0x0000040       |        0x0000002



이런식으로 메모리상 특정 주소에 각각의 변수가 저장되잖아.


떠블뽀인떠는 뽀인떠의 주소를 저장하기 위해 쓰는거라는데

만약 위 코드에서 b라는 뽀인떠의 주소를 저장하고 싶으면


int *c = &b


라고 쓰면 메모리상에


          메모리상 주소   |        저장된값

a        0x0000002       |            3

b        0x0000040       |        0x0000002

c        0x0000080       |        0x0000040


이런식으로 b뽀인떠의 메모리 주소가 c에 저장되는거 아님?

근데 실제로 이 코드를 실행해보면 warning 뜸.


""""

main.c:7:14: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]                                                                              
     int *c = &b; 
""""

#include <stdio.h>

int main()
{
    int a = 3;
    int *b = &a;
    int *c = &b;
    printf("a =  %d address = %x \n", a, &a);
    printf("b =  %x address = %x \n", b, &b);
    printf("c =  %x address = %x \n", c, &c);
    return 0;
}


대신 c의 값을 int **c = &b;로 쓰면 오류 안남.

결국 뽀인떠가 주소저장을 위한 변수라면 int *c = &b라는 표현도 문제없어 보이는데 왜 안됨?