-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)s の配列のサイズMAXCOL int、またはMAXCOL * sizeof(int).

したがって、提示する呼び出しはバイトmallocを割り当てます。MAXROW * MAXCOL * sizeof(int)

mallocキャストについて:呼び出しによって割り当てられるバイト数には影響しません。実際、これは完全に不要であり (この場合は何の効果もありません)、省略したほうがよいでしょう。

于 2013-07-29T12:35:56.080 に答える
1

pint長さの配列へのポインタMAXCOLです。lengthsizeof(*p)の配列のサイズも同様です。したがって、 に等しいです。intMAXCOLMAXROW *sizeof(*p)MAXROW*MAXCOL*sizeof(int)

を返すため、 の戻り値のキャストはmalloc必要ありません。原則として、C コードでは、 の戻り値をキャストしないでください。mallocvoid*malloc

于 2013-07-29T12:30:44.737 に答える
0

intが32ビットか64ビットかは、アーキテクチャに依存すると思います。次に、David が言うように、そのサイズの MAXROW 倍です。

于 2013-07-29T12:38:20.030 に答える