간단한 예입니다.
#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이 됩니다.
컴파일러가 똑똑해서 배열로 선언된 경우에는 따로 관리를 해준다고 알고 있으면 되겠습니다.
'c·c++ > c 프로그래밍' 카테고리의 다른 글
정수의 점화식 (0) | 2012.05.25 |
---|---|
c언어 입력받은 초를 일/시간/분/초로 환산하기 (0) | 2012.05.25 |
알수 없는 수수께끼 i = i--; 의 동작 (0) | 2012.05.24 |
카드게임 플러쉬 체크 (0) | 2012.05.24 |
C언어에서 명령을 시간 내에만 실행하게 하는 방법이 있나요? (0) | 2012.05.20 |