はじめての C

Arrays and Pointers in C

C の 配列と 配列等式

以下の テキストでは 一般的な n次元配列の かわりに、2次元配列を 使用します。 それにより、C の 配列と ポインタを 使った 複雑で 細かな点を 説明することが でき、また その計算が より 扱いやすくなります。

C の 2次元配列では、その要素が 1次元配列 (列 row) であるような、1次元配列として 処理されます。

たとえば、T (この T は あるデータ型) 4x3 の 配列は、T mat[4][3] のように 宣言することが できます。

それは 下の 図のように 説明されます。

                      +-----+-----+-----+
mat == mat[0] ---> | a00 | a01 | a02 |
+-----+-----+-----+
+-----+-----+-----+
mat[1] ---> | a10 | a11 | a12 |
+-----+-----+-----+
+-----+-----+-----+
mat[2] ---> | a20 | a21 | a22 |
+-----+-----+-----+
+-----+-----+-----+
mat[3] ---> | a30 | a31 | a32 |
+-----+-----+-----+

配列の 要素が 列 row の 後ろの 列として メモリに 記録されるので、T型の 配列 mat[m][n] の 要素に 対する 配列等式は、

   address(mat[i][j]) = address(mat[0][0]) +
(i * n + j) * size(T)

= address(mat[0][0]) +
i * n * size(T) +
j * size(T)

= address(mat[0][0]) +
i * size(row of T) +
J * size(T)