1

インターネットで見つかったいくつかのコードを見て、次のコードに出くわしました。

int (*p)[3];

p = (int(*)[3]) calloc(5*3,sizeof(int));

マトリックスを割り当てる方法にすぎませんか?

int (*p)[3]3 int の配列へのポインターを作成することは理解していますが、calloc呼び出しについてはわかりません。最初のパラメーター ( ) に等しいcalloc数 (この場合) を割り当てて初期化することはわかっています。 したがって、それを割り当てると、ポインタが割り当てられたばかりのメモリ位置を指すようになるはずです。int5*3
p

それで、私の推論が間違っていることを知っているので、誰かが私を訂正してもらえますか?

4

2 に答える 2

3
int (*p)[3];

これが 3 つの int の配列へのポインターであることは確かですが、このポインターは3 つの intの配列の配列の先頭を指すこともできます。

p = (int(*)[3]) calloc(5*3,sizeof(int));

ここでは、このポインターに 5 * 3 int を割り当てます。int[3]3 つの int があるので、そのようなint[3]配列を 5 つ割り当てました。

次に、これらのint[3]配列を次のように参照できます。

p[0]...p[4]

したがって、次の範囲の2次元配列が得られます

p[0][0]...p[0][2]

p[4][0]...p[4][2]

于 2012-05-14T15:24:46.827 に答える
0

あなたの理解は正しいです。 calloc15 秒を保持するのに十分な連続したメモリを割り当ててゼロにしint、その先頭へのポインタを返します。

于 2012-05-14T15:24:29.947 に答える