c - C sizeof() 如何返回这些值

标签 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

最佳答案

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

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

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

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

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

sizeof(*ppw) 是 ints = 6 ints = 24

的数组 (3x2) 的大小

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

关于c - C sizeof() 如何返回这些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30292713/

相关文章:

java - seqSearchFunction(字符串 s,字符 c)

c - 如何正确检查传递给 malloc() calloc() realloc() 的大小及其返回值?

Microsoft Windows 中的 CPU 设备驱动程序

c - 两个 C 语法花絮 : no init for and char *w[4] vs char w[4]

Ruby 拆分数组然后根据模式返回第一个元素

c++ - 被释放的指针未分配(删除数组中的一个元素)

c++ - 数组的地址

c - 字符数组的打印地址

c - 无法找到导致此错误的原因

R:有效地确定一个数组的哪些切片在一秒内出现