#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 23
int main(){
int (*p)[MAXCOL];
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
return 0;
}
我需要知道将为以下代码分配多少字节(对于此p)。 另外,如果大小不同,malloc会在malloc之前添加/释放在malloc中分配的字节吗?
感谢。
答案 0 :(得分:1)
p
是指向长度为int
的{{1}}数组的指针。因此,MAXCOL
是长度为sizeof(*p)
的{{1}}数组的大小。因此int
等于MAXCOL
。
由于MAXROW *sizeof(*p)
返回MAXROW*MAXCOL*sizeof(int)
,因此不需要转换malloc
的返回值。作为一般规则,在C代码中,您不应该转换malloc
的返回值。
答案 1 :(得分:1)
sizeof(*p)
是MAXCOL
int
s或MAXCOL * sizeof(int)
数组的大小。
因此,您提出的malloc
来电将分配MAXROW * MAXCOL * sizeof(int)
字节。
关于演员:它不会影响malloc
调用分配的字节数。事实上,它完全没有必要(在这种情况下没有任何影响),最好省略。
答案 2 :(得分:0)
我认为这取决于您的体系结构,如果整数是32位或64位。然后正如大卫所说,MAXROW是这个大小的倍。