C 三维阵列的指针算法

C 三维阵列的指针算法,c,arrays,pointers,C,Arrays,Pointers,我知道指针在一维和二维数组中是如何工作的,但我正试图在三维数组中找到它 对于一维阵列: 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) 错。是的 M[i][j] ==> *(*(M+i)

我知道指针在一维和二维数组中是如何工作的,但我正试图在三维数组中找到它

对于一维阵列:

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)
错。是的

M[i][j] ==> *(*(M+i)+j)
对于3D

M[i][j][k] ==>  *(*(*(M+i)+j)+k)

如果三维数组具有C列和R行,则每个切片都是C*R元素

M[i][j][k] = *(M + C*R*i + C*j + k)

如果三维数组具有C列和R行,则每个切片都是C*R元素

M[i][j][k] = *(M + C*R*i + C*j + k)

对于矩阵M[X][Y][Z]

M[i][j][k]=*(M+(Y*Z*i+Z*j+k))


对于矩阵M[X][Y][Z]

M[i][j][k]=*(M+(Y*Z*i+Z*j+k))


使用指针语法重写订阅,然后扩展指针算法,可以得到:

M[i][j][k] = *(*(*(M + i) + j) + k) = *(&M[0][0][0] + x * y * i + y * j + k)

其中x、y和z(后一个未使用)是数组的维度。

使用指针语法重写订阅,然后展开指针算法,得到:

M[i][j][k] = *(*(*(M + i) + j) + k) = *(&M[0][0][0] + x * y * i + y * j + k)

其中x、y和z(后一个未使用)是数组的维度。

您在这里进行三重解引用?这不是针对指针数组,不是针对n维数组吗?@yngum否。2D数组不是指针数组。3D数组不是指针数组的数组。它之所以能工作,是因为数组在C中的各种上下文中都会衰减为指针。但对于理解多维映射到内存中的行主索引(这似乎是OP所寻找的)并没有多大帮助。您在这里做的是三重解引用?这不是针对指针数组的吗,不是n维数组?@yngum不是。2D数组不是指针数组。3D数组不是指针数组的数组。这是因为在C语言中数组在不同的上下文中衰减为指针的方式。但这对于理解多维如何映射到内存中的行主索引并没有很大帮助,这似乎是OP所寻找的。