我知道指针如何为 1D 和 2D 数组工作,但我正试图为 3D 数组弄清楚。
对于一维数组:
V[i] ==> *(V+i)
对于具有 C 列的二维数组
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))