假设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;
}
假设"sizeof(int)是"(什么?)。。。我猜你的意思是4。在第一行中,您声明p是一个指向27个整数数组的指针。在第二行中,您在堆中为解引用的p的大小分配内存,即27个整数乘以8,即27*4*8,因此分配的字节数为864。
在您的代码中,
int (*p)[MAXCOL];
相当于声明p
为指向int
s的MAXCOL
数量的数组的指针。
因此考虑到CCD_ 5是4字节(32位编译器/平台),sizeof(*p)
是108,并且MAXROW *sizeof(*p)
是8 * 108
,并且如果成功,则malloc()
分配那么多字节。
此外,请参阅关于为什么不在C
中投射malloc()
和族的返回值的讨论。。
答案应该是MAXROW*MAXCOL*sizeof(int)
。int
的大小无法从所示代码中确定。它可以是2
、4
、8
。。。或者甚至42
,几乎任何大于0
的东西。
如果你的老师或课程期望432
,他们依赖于你没有提供的额外上下文。重读你的问题,你写假设sizeof(int)。你需要准确地说出应该假设的内容。