3

我的代码中有这个:

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)

4

5 回答 5

7

array是代码中的指针。sizeof(array)因此以 C 字节返回该指针的大小(提醒:C 的字节中可以有超过 8 位)。

所以,8 是你的指针大小。

size_t此外, printf() 格式字符串中的正确类型说明符是%zu.

于 2013-03-26T02:32:56.457 回答
3

sizeof没有返回值,因为它不是一个函数,它是一个 C 语言结构——考虑一下你可以sizeof array不用括号编写的事实。作为 C 语言结构,它的价值完全基于编译时信息。它不知道你的数组有多大,只知道array指针变量有多大。有关该主题的完整报道,请参阅http://en.wikipedia.org/wiki/Sizeof

于 2013-03-26T04:41:03.473 回答
3

array是一个指针,因此它将是指针(sizeof(void *)sizeof(char *))的大小,而不是sizeof(char)您所期望的。看来您使用的是 64 位计算机。

于 2013-03-26T02:15:40.717 回答
2

sizeof(array)返回指针的大小。

于 2013-03-26T02:15:50.350 回答
-2

您正在计算整个数组的大小 (4*sizeof(char)) 但您希望知道数组 (4) 上的项目数。

你可以做

size_t 数组大小 = sizeof (array)/sizeof(char);

它将返回 8/2 = 4

于 2013-03-26T02:35:28.913 回答