在C语言中使用Sizeof和malloc函数
我是C的新手 我的问题是下面的代码在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 谁能解释一下原因吗 下一
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