포인터를 \'어떤 데이터를 가리키는\' 추상적인 존재로 생각하는 경향이 있는 것 같은데, 포인터도 결국 일반적인 타입이랑 똑같아.
어떤 임의의 변수형이 있으면, \'크기\'와 \'담겨있는 데이터의 의미\' 이 두가지만 생각하면 돼.
char, short, int, long 등이 해당 변수에 담겨있는 데이터를 정수형으로 처리하는 것처럼
int* 는 해당 변수에 담겨있는 데이터를 \'주소\'로 해석하고, 그 주소가 가리키는 메모리에 int형 데이터가 저장되어있다는거야.
int a = 3; 하면 sizeof(int) 만큼의 메모리가 할당되고, 그 곳에 3 이라는 데이터가 저장되는 것처럼,
int *b = &a; 하면 sizeof(int*) 만큼의 메모리가 할당되고, 그 곳에 a의 주소 라는 데이터가 저장되는거지.
typedef int * int_ptr;
int a = 3;
int_ptr b = &a;
이런식으로 typedef 로 치환해서 생각해보면 좀 더 이해가 쉬울겨.
sizeof(int) == 4, sizeof(int*) == 4인 시스템이라면 다음과 같이 저장되겠지. (스택의 방향은 논외로 치자)
0xffff0000 | 3 |
0xffff0004 | 0xffff0000 |
0xffff0008 ...........
하나 더 얘기하자면, 플랫폼마다 int, long과 같은 타입의 크기가 다른 것처럼, 포인터 타입의 크기에 대해서도 임의의 가정을 하지 않는 게 좋을 거야.
댓글 0