我的代码中有这个:
int x = 4;
char* array = malloc(x*sizeof(char));
size_t arraysize = sizeof (array);
printf("arraysize: %zu\n", arraysize);
这段代码打印出来,
数组大小:8
为什么是8而不是4?(因为 4*sizeof(char) = 4 * 1)
array
是代码中的指针。sizeof(array)
因此以 C 字节返回该指针的大小(提醒:C 的字节中可以有超过 8 位)。
所以,8 是你的指针大小。
size_t
此外, printf() 格式字符串中的正确类型说明符是%zu
.
sizeof
没有返回值,因为它不是一个函数,它是一个 C 语言结构——考虑一下你可以sizeof array
不用括号编写的事实。作为 C 语言结构,它的价值完全基于编译时信息。它不知道你的数组有多大,只知道array
指针变量有多大。有关该主题的完整报道,请参阅http://en.wikipedia.org/wiki/Sizeof。
array
是一个指针,因此它将是指针(sizeof(void *)
或sizeof(char *)
)的大小,而不是sizeof(char)
您所期望的。看来您使用的是 64 位计算机。
sizeof(array)
返回指针的大小。
您正在计算整个数组的大小 (4*sizeof(char)) 但您希望知道数组 (4) 上的项目数。
你可以做
size_t 数组大小 = sizeof (array)/sizeof(char);
它将返回 8/2 = 4