C sizeof()如何返回这些值

时间:2015-05-17 22:15:29

标签: c arrays pointers sizeof

我在尝试理解C下的内存分配时得到了以下代码。该行旁边的注释表示我得到的输出。然而,除了出现的字母大小,我感到很困惑。这个输出是标准的吗?如果是这样,这些回报是怎么回事?

char *pk[] = {"12", "34", "56"};
int w[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (*ppw)[2][3] = &w;

char ch = "a";
int in = 10;

int i = sizeof(ch);
printf("SIZE OF CHAR IS %d\n",i); //1

i = sizeof(in);
printf("SIZE OF INT IS %d\n\n",i); //4

int n = sizeof(pk);
printf("%d\n",n); //24

n = sizeof(*pk);
printf("%d\n",n); //8

n = sizeof(**pk);
printf("%d\n",n); //1

n = sizeof(ppw);
printf("%d\n",n); //8

n = sizeof(*ppw);
printf("%d\n",n); //24

n = sizeof(**ppw); 
printf("%d\n",n); //12

1 个答案:

答案 0 :(得分:4)

您的系统有8字节指针和4字节整数。请注意,*p表示p[0]

sizeof(pk)是3个指针数组的大小= 24

sizeof(*pk)是数组中第一个指针的大小= 8

sizeof(**pk)是sizeof(char),1

sizeof(ppw)是指针= 8

的大小

sizeof(*ppw)是一个数组的大小(3x2)ints = 6 ints = 24

sizeof(**ppw)是一个数组的大小(3)ints = 3 ints = 12