ポインターが 1D および 2D 配列でどのように機能するかは知っていますが、3D 配列でそれを理解しようとしています。
1D 配列の場合:
V[i] ==> *(V+i)
C 列の 2D 配列の場合
M[i][j] ==> *(M+(C*i+j))
3D 配列のポインター演算はどうなりますか?
M[i][j] ==> *(M+(C*i+j))
違う。それは
M[i][j] ==> *(*(M+i)+j)
3D用
M[i][j][k] ==> *(*(*(M+i)+j)+k)
3D 配列に C 列と R 行がある場合、各スライスは C*R 要素です。
M[i][j][k] = *(M + C*R*i + C*j + k)
ポインター構文を使用してサブスクリプションを書き換えてから、ポインター演算を展開すると、次のようになります。
M[i][j][k] = *(*(*(M + i) + j) + k) = *(&M[0][0][0] + x * y * i + y * j + k)
ここで、x、y、z (後者は未使用) は配列の次元です。
行列 M[X][Y][Z] の場合
M[i][j][k] = *(M+(Y*Z*i+Z*j+k))