我的代码中有这个:
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)
答案 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