无法理解sizeof()的返回值

时间:2013-03-26 02:14:25

标签: c malloc

我的代码中有这个:

int x = 4;
char* array = malloc(x*sizeof(char));
size_t arraysize = sizeof (array);
printf("arraysize: %zu\n", arraysize);

此代码打印出来,

  

arraysize:8

为什么是8而不是4? (由于4 * sizeof(char)= 4 * 1)

5 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

答案 4 :(得分:-2)

您正在计算完整数组的大小(4 * sizeof(char)) 但你可以知道阵列上的物品数量(4)。

你可以做到

  

size_t arraysize = sizeof(array)/ sizeof(char);

它将返回8/2 = 4