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
的大小
我得到了下面的代码,试图理解 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