指针和二维数组

二维数组可以看成由几个一维数组作为元素组成的一维数组。

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

它是由3个数组元素(a[ 0 ],a[ 1 ],a[ 2 ])组成,每个元素都是一个一维数组。

数组名a代表数组的首地址,二维数组名x代表是一个行地址。

a代表的是a[ 0 ] ;

x[ 0 ],x[ 1 ],x[ 2 ]为一维数组名的行地址

即(x+0) 代表的是x[ 0 ]的首地址,   (x+1)代表的是x[ 1 ]的首地址,  (x+2)代表的是x[ 2 ]的首地址

如果a是一维数组名,a[ i ]是a数组中的一个元素,那么a[ i ]等价于*(a+i);

同样,将二维数组a看作是一个一维数组,a是数组名,a[ i ]为a数组的一个元素,,那么a[ i ]等价于*(a+i)。============a[ i ]=*(a+i)

所以,二维数组a中的元素a[ i ]a[ j ]的地址(或指针)既可以用a[ i ]+j来表示,也可以用*(a+i)+j表示  =============a[ i ]a[ j ]=*(a[ i ]+j)=*(*(a+i)+j)

=========================================================================

有意思的思考

在二维数组里面,a+1和*(a+1)他们都是代表着同一个地址,这是因为二维数组里面,a代表的是0行的首地址,  a+1就是第2行的首地址,那么*(a+1),   根据上面的等价关系,    我们可以知道*(a+1)==a[ 1 ],在二维数组里面也是表达第2行的首地址,所以是一样的。

=========================================================================

二维数组的有关指针

(重点!)

表示形式含义地址
a二维数组名,指向一维数组a[0],即0行的首地址2000
a[0],*(a+0),*a0行0列元素地址2000
a+1,&a[1]1行首地址2016
a[1],*(a+1)1行0列元素a[1][0]的地址2016
a[1]+2,*(a+1)+2,&a[1][2]1行2列元素a[1][2]的地址2024
*(a[1]+2),*(*(a+1)+2),a[1][2]1行2列元素a[1][2]的值元素值为13

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值