a+1代表 序号为1的行的首地址。
a+2 代表 a[2]的首地址
a[0]代表 一维数组a[0]中第0列元素的地址,即&a[0][0]
a[1]的值是 &a[1][0];
a[2]的值是 &a[2][0];
a[0]+0 是a[0][0]的地址,即 &a[0][0];
a[0]+1 是a[0][1]的地址,即 &a[0][1];
a[i] 和 *(a+i) 等价
a[0]+1 和 *(a+0)+1 都是 &a[0][1]
a[1]+2 和 *(a+1)+2 都是 &a[1][2]
*(a[0]+1)就是a[0][1]的值。
*(*(a+0)+1) 或 *(*a+1) 就是a[0][1]的值
*(*(a+i)+j) 或 *(a[i]+j)就是a[i][j]的值
note: *(a+i)和a[i]等价
a[i]详解:
① 若a是一维数组名,则a[i]代表a数组序号为i的元素的存储单元;
a[i]是有物理地址的,是占存储单元的。
② 若a是二维数组,则a[i]是一维数组名,它只是一个地址,并不代表某一元素的值(如同一维数组名只是一个指针常量一样)。
如:a, a+i, a[i], *(a+i), *(a+i)+j, a[i]+j 都是地址
而 *(a[i]+j) 和 ((a+i)+j) 是二维数组元素a[i][j]的值。
–摘自C语言课本,仅为复习笔记