无法理解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