首先建立三维数组的形状概念是重要的。
一维数组可以当作一条“线”,二维数组则可以看作由多个一维数组(多条线)组成的一个“面”,那么三维数组则可以看作有多个二维数组(多个面)组成的“长方体”,见接图。
A[0]是一维数组第一个元素,A则是第一个元素A[0]的首地址。
A[0][0]是第一行第一个元素,A则是第一行的首地址,也是第一行的第一列的首地址。
A[0][0][0]是第一层第一行第一列元素,A则是第一层第一行的首地址,同时也是第一列的首地址。
追问为什么用普通指针(int *p)和int a [2][3] ,加入是给一个int a[4][2][3]赋值的时候为什么最后循环输出的形式不一样(int * p=a[0][0],和 int *a[2][3]=&a
追答二维数组用指针操作很容易出错,再用来操作三维数组的话,确实令人头疼,如果你一定要使用指针来操作三维数组,那就请你牢记 : 对于三维数组A[K][M][N],A是一个指针数组的头指针,且其数组元素还是指针.......。
结合截图理解,A[k]是二维数组的首地址,也就是第k层的首地址,a[k][m]是第k层第m行的首地址。
为了给第k层,第m行的第n个元素赋值,用数组则很简单,即value -> A[k][m][n],用指针时,即
value *(*(*(a + k) + m + n)
或
valude *(*(a + k) + m)[n]
或
valude *(a + k)[m][n]