どのようにC言語において二次元配列のポインタを表すか
C言語では2次元配列は2次元配列のポインタで表現可能
2次元の配列である arr が以下の通り宣言・初期化されているとします。
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
二次元配列の最初を指すポインタptrを次のように定義できます。
int (*ptr)[4] = arr;
ここで(*ptr)[4]は、ptrが4要素の1次元配列を指すポインタであることを示します。
二次元配列arrの要素には、ポインタptrを経由してアクセスできます。下記のとおりです。
printf("%d", *(*ptr + 2)); // 输出3
*ptr + 2とは、ptrをまず逆参照して1次元配列へのポインターを得て、次にポインターに2を加算し、最後に逆参照して要素の値を得ることを意味します。
同時に、ポインタptrで二次元配列全体を走査することもできます。
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", *(*(ptr + i) + j));
}
printf("\n");
}
ここでの *(*(ptr + i) + j) は、まず ptr を i だけ加算して 1 次元配列へのポインタとし、次にそのポインタを j だけ加算し、最後に逆参照して要素の値を取得することを意味します。二重ループで反復することで二次元配列のすべての要素を出力できます。