我有这个在我的代码:
int x = 4;
char* array = malloc(x*sizeof(char));
size_t arraysize = sizeof (array);
printf("arraysize: %zun", arraysize);
这段代码打印出
arraysize: 8
为什么是8而不是4?
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 = sizeof(array)/sizeof(char);
它将返回8/2 = 4