在C语言中使用Sizeof和malloc函数

在C语言中使用Sizeof和malloc函数,c,malloc,sizeof,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 谁能解释一下原因吗 下一

我是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


谁能解释一下原因吗

下一行将内存分配给新的\u Max所指向的对象

New_Max=(int)malloc(sizeof(int)*length));
下面一行获取指针大小的信息:

sizeof(New_Max)

所以,指针指向的大小和它自身的大小是两个不同的东西。这就是为什么要将New_Max的大小设置为4。

下一行将内存分配给New_Max所指向的对象

New_Max=(int)malloc(sizeof(int)*length));
下面一行获取指针大小的信息:

sizeof(New_Max)

所以,指针指向的大小和它自身的大小是两个不同的东西。这就是为什么要将New_Max的大小设置为4。

下一行将内存分配给New_Max所指向的对象

New_Max=(int)malloc(sizeof(int)*length));
下面一行获取指针大小的信息:

sizeof(New_Max)

所以,指针指向的大小和它自身的大小是两个不同的东西。这就是为什么要将New_Max的大小设置为4。

下一行将内存分配给New_Max所指向的对象

New_Max=(int)malloc(sizeof(int)*length));
下面一行获取指针大小的信息:

sizeof(New_Max)

所以,指针指向的大小和它自身的大小是两个不同的东西。这就是为什么您将New_Max的大小设置为4。

您做出了错误的假设,
sizeof
对这两种类型的内存分配的行为方式相同。数组和指针之间存在着根本的区别,以及它与
sizeof
的关系。如果您为其提供了数组,如下所示:

int Max[10];
size_t size = sizeof(Max);
然后,您将得到总体大小,即元素数乘以每个元素的大小,即:

10 * sizeof(Max[0])
另一方面,对于指针,它会导致指针本身的大小,而不考虑任何元素,因此得到的只是
sizeof(int*)
。无论是指向
NULL
还是某个数组对象,大小都是相同的


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

您做出了错误的假设,
sizeof
对这两种类型的内存分配的行为方式相同。数组和指针之间存在着根本的区别,以及它与
sizeof
的关系。如果您为其提供了数组,如下所示:

int Max[10];
size_t size = sizeof(Max);
然后,您将得到总体大小,即元素数乘以每个元素的大小,即:

10 * sizeof(Max[0])
另一方面,对于指针,它会导致指针本身的大小,而不考虑任何元素,因此得到的只是
sizeof(int*)
。无论是指向
NULL
还是某个数组对象,大小都是相同的


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

您做出了错误的假设,
sizeof
对这两种类型的内存分配的行为方式相同。数组和指针之间存在着根本的区别,以及它与
sizeof
的关系。如果您为其提供了数组,如下所示:

int Max[10];
size_t size = sizeof(Max);
然后,您将得到总体大小,即元素数乘以每个元素的大小,即:

10 * sizeof(Max[0])
另一方面,对于指针,它会导致指针本身的大小,而不考虑任何元素,因此得到的只是
sizeof(int*)
。无论是指向
NULL
还是某个数组对象,大小都是相同的


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

您做出了错误的假设,
sizeof
对这两种类型的内存分配的行为方式相同。数组和指针之间存在着根本的区别,以及它与
sizeof
的关系。如果您为其提供了数组,如下所示:

int Max[10];
size_t size = sizeof(Max);
然后,您将得到总体大小,即元素数乘以每个元素的大小,即:

10 * sizeof(Max[0])
另一方面,对于指针,它会导致指针本身的大小,而不考虑任何元素,因此得到的只是
sizeof(int*)
。无论是指向
NULL
还是某个数组对象,大小都是相同的


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

新的\u Max
是指针
4
是您计算机上指针的大小。因为它是指针,您可以解释为什么希望它是20?为什么要将
malloc
的返回值转换为
int
?标准警告(正如Jens的问题所暗示的):不要转换
malloc
&friends的结果。实际上,不要将
void*
强制转换到其他指针。C不是C++。<代码> NexMax < /Cord>是指针。code>4是您计算机上指针的大小。因为它是指针,您可以解释为什么希望它是20?为什么要将
malloc
的返回值转换为
int
?标准警告(正如Jens的问题所暗示的):不要转换
malloc
&friends的结果。实际上,不要将
void*
强制转换到其他指针。C不是C++。<代码> NexMax < /Cord>是指针。code>4是您计算机上指针的大小。因为它是指针,您可以解释为什么希望它是20?为什么要将
malloc
的返回值转换为
int
?标准警告(正如Jens的问题所暗示的):不要转换
malloc
&friends的结果。实际上,不要将
void*
强制转换到其他指针。C不是C++。<代码> NexMax < /Cord>是指针。code>4是您计算机上指针的大小。因为它是指针,您可以解释为什么您希望它是20?为什么将
malloc
的返回值转换为
int
?标准wa