假设sizeof(int)
。
那么,将在动态堆上分配的字节总大小是多少?
你能解释一下原因吗?
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 8
#define MAXCOL 27
int main()
{
int (*p)[MAXCOL];
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
return0;
}
答案 0 :(得分:0)
在您的代码中,
int (*p)[MAXCOL];
与说法相同,将p
声明为指向MAXCOL
个int
个数组的指针。
因此,考虑到sizeof(int)
是4个字节(32位编译器/平台),
如果成功,则sizeof(*p)
为108,MAXROW *sizeof(*p)
为8 * 108
,malloc()
分配多个字节。
另外,please see this discussion on why not to cast the return value of malloc()
and family in C
.。
答案 1 :(得分:0)
假设&#34; sizeof(int)是&#34;(什么?)...我想你的意思是4。 在第一行中,您将p声明为指向27个整数数组的指针。 在第二行中,您为堆中的内存分配了取消引用p的大小 - 即27个整数乘以8 - 即27 * 4 * 8,因此分配的字节数为864.
答案 2 :(得分:0)
答案应该是MAXROW*MAXCOL*sizeof(int)
。无法从显示的代码中确定int
的大小。它可以是2
,4
,8
...甚至是42
,几乎都是0
。
如果您的教师或课程期望432
,他们会依赖您未能提供的额外背景。重新阅读你的问题,你写假设sizeof(int)。你需要说出应该准确的假设。