C sizeof() 如何返回这些值

How is C sizeof() returning these values

我得到了下面的代码,试图理解 C 下的内存分配。该行旁边的注释表示我得到的输出。不过,除了出现的字符大小外,我很困惑。这是输出标准吗?如果是这样,这些 returns 是怎么来的?


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

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

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

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

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

sizeof(ppw) 是一个指针的大小 = 8

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

sizeof(**ppw) 是 array(3) of ints = 3 ints = 12

的大小