我是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
。
任何人都可以解释它的原因。
答案 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
。