はじめての 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)