C/C++ 数组、寻址和三维数组

定义二维数组 a[m][n]

直接寻址 = 间接寻址

a[i][j]  = *(*(a+i)+j)

说明:

a+i 表示第i行的首地址

*(a+i)同*(a+i)+0 ,即&a[i][0]  

*(a+i)+j 表示第i行的第j各元素的地址,即&a[i][j]

*(*(a+i)+j)即为间接寻址,表示a[i][j]

同理:

定义三维数组 a[p][m][n]

a[i][j][k] = *( *( *(a+i) +j) +k)

说明:

a  表示数组的首地址,即a[0],同&a[i][j][k]

a+i  表示第i个“面”的首地址,即 a[i]

*(a+i),即*(a+i)+ 0,表示第i个面第一行的首地址,即a[i][0],即&a[i][0][0]

*(a+i)+ j 得到第i个“面”的第j“行”的首地址,即a[i][j],即&a[i][j][0]

*(*(a+i)+ j)+ 0 得到第i个“面”的第j“行”的第1个元素的地址,即&a[i][j][0]

*(*(a+i)+ j)+ k 得到第i个“面”的第j“行”的第k个元素的地址,即&a[i][j][k]

*(*(*(a+i)+j)+k)得到第i个“面”的第j“行”的第k个元素,即a[i][j][k]

理解:

三维数组是一种多个平面组成的特殊的二维数组

A[p][m][n] = p * a[m][n]

抽象意义上,p在空间上表示前后有几个面,m表示每一个面上的行数,n表示每一行的列数

猜你喜欢

转载自www.cnblogs.com/guoyujiang/p/11715404.html