在C中使用Sizeof和malloc函数

时间:2015-08-27 21:42:50

标签: c malloc sizeof

我是C的新手,

我的问题是以下代码,

int Max[10],*New_Max;
int length=5;
New_Max=(int)malloc(sizeof(int)*length));
printf("sizeof(Max)=%d,sizeof(New_Max)=%d",sizeof(Max),sizeof(New_Max));`

输出:

sizeof(Max)=40,sizeof(New_Max)=4

我预计sizeof(New_Max)20,但会打印为4

任何人都可以解释它的原因。

2 个答案:

答案 0 :(得分:2)

以下行将内存分配给New_Max指向的内容。

New_Max=(int)malloc(sizeof(int)*length));

并且,以下行抓取有关指针大小的信息:

sizeof(New_Max)

因此,指针指向的大小和它自己的大小是两个不同的东西。这就是为什么你将New_Max的大小变为4。

答案 1 :(得分:1)

您做出了错误的假设,sizeof对于两种类型的内存分配都以相同的方式运行。 数组指针之间存在根本区别,以及它与sizeof的关系。如果你提供数组,就像这里:

int Max[10];
size_t size = sizeof(Max);

然后你会得到整体大小,即元素数量乘以每个元素的大小,即:

10 * sizeof(Max[0])

另一方面,对于指针,它会导致指针本身的大小,而不考虑任何元素,因此你得到的只是sizeof(int *)。如果它指向NULL或某个数组对象并不重要,则大小将相同。

请注意,sizeof的正确格式说明符为%zu,而不是%d