为什么我总是8岁?

mit*_*t23 0 c arrays sizeof

char *c = (char *)malloc(30*sizeof(char));
printf("%lu \n",sizeof(c));
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我试图打印'c'的大小.无论我在代码中给出的是什么数字而不是'30',我都将sizeof(c)设为8.

问题是什么?如何确定阵列的大小?

数组的长度和大小是否相同?

Eri*_*tin 8

目前你要求64位机器上的指针大小为8字节.由于这是一个malloc而不是真正的数组,因此无法检索通过分配的缓冲区的大小c.

如果c被宣布为

char c[30];
Run Code Online (Sandbox Code Playgroud)

您可以使用确定大小

size_t size = sizeof(c)/sizeof(c[0])
Run Code Online (Sandbox Code Playgroud)

但说实话,如果我必须这样做,#define即使在编译时会删除大小计算,我也只是数组大小.在我看来,它使代码更清晰.