#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 中分配的字节?
谢谢。
sizeof(*p)
是 MAXCOL
int
s 或 MAXCOL * sizeof(int)
数组的大小。
因此,您提供的malloc
呼叫将分配MAXROW * MAXCOL * sizeof(int)
字节。
关于转换 :它不会影响malloc
调用分配的字节数。事实上,这是完全不必要的(在这种情况下没有任何影响(,最好省略。
p
是指向长度MAXCOL
的int
数组的指针。所以sizeof(*p)
是长度MAXCOL
的int
数组的大小。因此MAXROW *sizeof(*p)
等于MAXROW*MAXCOL*sizeof(int)
。
不需要强制转换 malloc
的返回值,因为malloc
返回void*
。作为一般规则,在 C 代码中,不应强制转换 malloc
的返回值。
我认为这取决于您的架构,如果整数是 32 位还是 64 位。然后正如大卫所说,MAXROW是这个大小的倍数。