无法理解sizeof()的返回值

我的代码中有这个:

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)

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

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

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

array是一个指针,因此它将是指针的大小( sizeof(void *)sizeof(char *) ),而不是sizeof(char)正如您所期望的那样。 看来你使用的是64位电脑。

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

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

您正在计算完整数组的大小(4 * sizeof(char))但您可以知道数组中的项目数(4)。

你可以做

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

它将返回8/2 = 4