1-二维数组指针
- int a[3][4]
- a代表二维数组首元素的地址,此首元素不是一个简单的整形元素,而是由4个整形元素组成的一维数组,因此a代表的是首行(序号为0的行)的起始地址。
- a+1代表序号为1的行的起始地址。a指向a[0], a+1指向a[1]或者说a+1的值是a[1]的起始地址,a+2代表a[2]的起始地址,若a的值是2000,则a[2]的值是2032.
- 若二维数组的首行起始地址为2000,一个整形数据占4个字节,即a的地址是2000,则a+1的值应该是2000+4*4=2016
- a[0],a[1],a[2]既然是一维数组名,从前面已知数组名代表数组首元素地址,因此a[0]代表一维数组a[0]中第0列元素的地址,即&a[0][0].同理a[1]的值是&a[1][0].
- 怎样表示a数组0行1列元素的地址?a[0]是一维数组名,该一维数组中农序号为1的元素的地址应该用a[0]+1来表示。
- 总结:
- a[0]+0, a[0]+1, a[0]+2, a[0]+3, 分别表示元素a[0][0],a[0][1],..a[0][3]的地址
- a指向a[0], a+1指向a[1],a[0]代表一维数组a[0]中第0列元素的地址
- 一维数组中,a[0]和 *(a+0)等价,a[1]和*(a+1)等价,因此二维数组中a[0]+1和*(a+0)+1都是&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+0)+1)就是a[0][1]的值;
- *(a[0]+1)也是a[0][1]的值;
- *(*a+1)也是a[0][1]的值;
- 总结:*(a+i)和a[i]是等价的。
- 二维数组a的有关指针总结
-