二维数组的指针
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
在上个练习中我们学习了指向一维数组的指针。我们知道一个二维数组可以分解成几个一维数组,所以指向二维数组的指针非常好理解。比如:
int a[2][3]
可以拆分成两个一维数组a[0]和a[1],这两个一维数组的长度都是3。数组名a就是这个二维数组的首地址,也是a[0]的首地址,即a[0][0]的地址。那a+1则是a[1]的首地址,即a[1][0]的地址。
注意 二维数组名a的增量是a[0]和a[1]数组长度为单位的,所a+1就直接跳到了a[1]这个数组。
如果是使用指针指向二维数组该怎么操作呢?
int (*p)[3]=a;
指针p指向包含3个int
元素的一维数组,此时p指向二维数组a的首地址,即a[0]的首地址。由此看出p+1和a+1的效果一样,都是指向a[1]的首地址。
如果我们想用指针p指向a[1][1]的地址该怎么表示呢?
*(p + 1) + 1;
/*(p+1)是a[1][0]的地址,再加上一个偏移位就是a[1][1]的地址,*(*(p + 1) + 1)表示的就是a[1][1]的值。
在线练习
{$ activeFileHint $}