-1
#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 中分配的字节之前的强制转换?

谢谢。

4

3 回答 3

1

sizeof(*p)MAXCOL int是s 或 s数组的大小MAXCOL * sizeof(int)

因此,malloc您提供的调用将分配MAXROW * MAXCOL * sizeof(int)字节。

关于演员表:它不会影响malloc调用分配的字节数。事实上,这是完全没有必要的(在这种情况下没有任何影响),最好省略。

于 2013-07-29T12:35:56.080 回答
1

pint是一个指向长度数组的指针MAXCOL。一个长度sizeof(*p)为 的数组的大小也是如此。因此等于。intMAXCOLMAXROW *sizeof(*p)MAXROW*MAXCOL*sizeof(int)

由于返回,malloc因此不需要转换 of 的返回值。作为一般规则,在 C 代码中,您不应强制转换.mallocvoid*malloc

于 2013-07-29T12:30:44.737 回答
0

我认为这取决于您的架构,如果整数是 32 位或 64 位。然后正如大卫所说,是 MAXROW 乘以那个大小。

于 2013-07-29T12:38:20.030 回答