どのように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 だけ加算し、最後に逆参照して要素の値を取得することを意味します。二重ループで反復することで二次元配列のすべての要素を出力できます。

bannerAds