2
int b[3][2] = { {0, 1}, {2, 3}, {4, 5} };
int (*bpp)[2] = b;
int *bp = b[0];

上記のコードで:*bpp二次元配列へのポインタですか? または、長さ 2 のポインターの配列ですか? なぜ*bpp括弧で囲まれているのですか?と の間に違いは*bpp[2]あり(*bpp)[2]ますか?

その間、次のコードで: (配列の次元の変更)

int i[4] = { 1, 2, 3, 4 };
int (*ap)[2] = (int(*)[2])i;

2行目、特に typecasting は非常に混乱します(int(*)[2])。正確にキャストするデータ型は何ですか?

ありがとうございます^^

4

1 に答える 1

3

bppは、2 つの配列へのポインターintです。*bppは 2 つの配列ですint。への 2 つのポインターの配列としてint *bpp[2]宣言します(この括弧により、2 つの配列へのポインターになります)。bppintint

(int(*)[2])2 つの配列へのポインターへのキャストintです。

これらは、「宣言は使用に従う」ルールを考慮することで読み取ることができます (演算子の優先順位の知識と組み合わせて)。

  dereference (so bpp is a pointer)
     |
     v
int (*bpp)[2]
 ^         ^
 |         |
 |  array index (so the thing that bpp points to is an array)
 |
 the thing on the left is the final type... here it is int,
 so the array is an array of int
于 2012-10-17T05:49:51.073 に答える