c·c++/c 프로그래밍

포인터 질문입니다.

바로이순간 2012. 5. 25. 14:30

간단한 예입니다.

 

#include <stdio.h>
int main(void) {

   char *s;
   char *room[10];

   printf("*s의 크기 :%d \n",sizeof(*s));
   printf("s의 크기 : %d\n",sizeof(s));
   printf("*room의 크기 : %d\n",sizeof(*room));
   printf("room의 크기 : %d\n",sizeof(room));
 

    return 0;
}

 

저 4개의 차이를 모르겠습니다

아주 자세히 설명해주시면감사하겠습니다.

궁극적으로 저 size of(room)등 <<이건 무엇을 의미하는지

------------------------------------------------------------------------------------------------------------

sizeof(x) 는 x라는 변수가 메모리 상에서 몇 바이트를 차지하는지 알려줍니다.


char *s; 에서 s는 문자의 포인터입니다. - 문자배열로 생각할 수도 있습니다.


sizeof(*s) 는 sizeof(s[0]) 와도 같습니다. s라는 문자배열의 0번째 자료는 문자입니다.

문자는 1바이트 입니다. 따라서 결과는 1입니다.


sizeof(s)는 ((문자의 포인터)) 인 s의 크기를 구하는 것입니다.

32비트 세계에서 모든 포인터의 크기는 32비트 혹은 4바이트 입니다.


char *room[10] 에서 room은 위의 경우의 s와 같은 문자의 포인터들의 배열입니다.


sizeof(*room) 은 sizeof(room[0]) 과 같습니다. room[0]은 문자의 포인터 입니다.

따라서 크기는 4가 됩니다.


한편 sizeof(room) 의 경우는 room이 배열로 선언되었기 때문에 배열의 크기 전체를 나타냅니다.

4바이트 짜리가 10개 있기 때문에 40이 됩니다.


컴파일러가 똑똑해서 배열로 선언된 경우에는 따로 관리를 해준다고 알고 있으면 되겠습니다.