不能理解sizeof()的返回值



我有这个在我的代码:

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

相关内容

  • 没有找到相关文章

最新更新