#include <stdio.h>
void print_sizeof(char *name[]) {
printf("%d\n", sizeof(name));
}
void main()
{
char name1[][10] = { "Jan", "Feb" };
char *name2[] = { name1[0], name1[1] };
printf("%d\n", sizeof(name1));
printf("%d\n", sizeof(name2));
print_sizeof(name2);
}
3,4분반 기출문제 8번입니다.
직접 실행시켜보니
sizeof(name2)가 16이고 print_sizeof(name2)의 출력값이 8이던데
이 두 값이 이렇게 나오는 이유를 모르겠습니다.
제가 예상하기로는 name2는 두개의 원소를 가진 포인터 배열이니까 크기가 8이고
print_sizeof(name2)역시 8이 나올것이라고 예상했습니다..
이러한 결과가 나오는 이유를 설명해주시면 감사하겠습니다.
name2는 사실 포인터로 구성된 일차원배열입니다.
name2에는 포인터(8바이트)가 2개있으므로 printf("%d\n", sizeof(name2));는 16
void print_sizeof(char *name[])에서 name은 포인터이므로 print_sizeof(name2);는 원소 갯수 상관없이 8
#include <stdio.h>
void print_sizeof(char *name[]) {
printf("%d %p %p\n", sizeof(name), name, name[0]);
}
int main()
{
char name1[][10] = { "H", "e", "l", "l", "o" };
char *name2[] = { 1, 2, 3, 4, 5 };
char *name3[] = { name1[0], name1[1], name1[2], name1[3], name1[4] };
printf("%d %p %p\n", sizeof(name1), name1, name1[0]);
print_sizeof(name1);
printf("%d %p %p\n", sizeof(&name1), &name1, &name1[0]);
printf("%d %p %p\n", sizeof(name2), name2, name2[0]);
print_sizeof(name2);
printf("%d %p %p\n", sizeof(&name2), &name2, &name2[0]);
printf("%d %p %p\n", sizeof(name3), name3, name3[0]);
print_sizeof(name3);
printf("%d %p %p\n", sizeof(&name3), &name3, &name3[0]);
}
이 코드를 한번 실행해보시면 이해하시는 데 도움이 될 것 같습니다. (%p는 주소값 출력하는 서식지정자입니다.)