二维数组与指针
定义一个3行4列的数组a,数组a中的(1,9,17)可以看作是所在行的首地址,数组的每一行可以看做是一个一维数组。所以说,二维数组行的首地址称为行指针。
对于数组a,将每1行看成1个元素,数组a包含3个虚拟元素,即a[ 0 ],a[ 1 ],a[ 2 ],此时一维数组a可以进行a + 0,a + 1,a + 2,a + 3 的变址运算,a + 0,a + 1,a + 2,a + 3就相当于&a[ 0 ],&a[ 1 ],&a[ 2 ],&a[ 3 ],也就是数组的行指针。
行指针的特性就是:指针加1就是移动了一行。a + i表示第 i 行的行指针,也就是第 i 行的首地址。
元素的地址也就是元素的指针,也叫列指针,元素的指针加1就移动了一个元素的位置。第 i 行 j 列的元素指针可以表示为 a[ i ] + j。如图:
取一下数组a每行的首地址
并观察一下每一行的元素地址是怎么变化的
总结
那么,指针法引用元素就可以表示为 *(a[ i ] + j )等价于 a[ i ] [ j ],也可用 * (*(a + i) + j)表示。
易错点
打印a[ 0 ] + 1表示打印第0行第1列元素的地址;
打印&a[ 0 ] + 1时,此时&a[ 0 ]表示数组a的首地址,+ 1表示移动一行,与 a + 1相等;
首地址和行地址的区别
首地址表示数组第一个元素的首地址,a。
行地址表示第 a + i行的首地址,a[ i ] == *(a + i)