printf("char* str[4]의 크기 : %d\nchar ptr[4][50]의 크기 : %d\n",sizeof *str, sizeof *ptr);
를 다음과 같이 수정해주세요...
printf("char* str[4]의 크기 : %d\nchar ptr[4][50]의 크기 : %d\n",sizeof str, sizeof ptr);
결과는 16 , 200 입니다.
가령 변수 int number; 라고 선언을 하면 number의 크기는? 4 겠죠.. 뭐 상황마다 다르겠지만...
그럼 int *ptr; ptr의 크기는? 4겠죠... 모든 포인터의 크기는 4 입니다. 만약 상수를 저장하고자 한다면 그 상수는
ptr 에 저장되는 것이 아니라... ptr이 가르키고 있는 부분에 저장되는 것이 겟죠..
char *str[4]; 는 char 포인터 4개 입니다.. 당연히 16 이겠죠... 머.. 여기에 어떤 내용이 저장되있는지는
중요하지 않습니다... 그 크기는 항상 포인터의 크기가 나올뿐이요...
반면... char ptr[4][50]; 은 엄현히 메모리에 4*50 의 공간확보르 하죠.. 그 주소로 ptr 을 사용하죠 따라서
크기는 200 입니다...
경선 님이 쓰신 글 :
: // char* []와 char [][]의 비교
:
: #include <stdio.h>
:
: void main(void)
: {
: char* str[4]={"gold",
: "silver",
: "copper",
: "neck"};
:
: char ptr[4][50] = {
: "빨강",
: "주황",
: "노랑",
: "초록"
: };
:
: for (int i = 0; i < 4; i++) // char* str 출력
: printf("%s\n", str[i]);
:
: for (int i = 0; i < 4; i++)
: printf("%s\n", ptr[i]); // char [][] 출력
:
: printf("char* str[4]의 크기 : %d\nchar ptr[4][50]의 크기 : %d\n",
: sizeof *str, sizeof *ptr);
: // 위의 printf()에서 char* [4]과 char [4][50]의 크기를 비교하려는데 sizeof 표기가 맞는지 모르겠네요. 틀리다면 고쳐주세요. 그리고 char* []가 크기가 더 적은 것으로 추측이 가는데 왜 그런가요?
: }
|