二维数组:行指针与列指针精讲

上课听懵了,下课后自己看了一下午书总结了一下子,觉得起码可以看懂代码了。

如果有错误还请大家指出

 引入:一维数组与指针

对于一维数组a[5]={0,1,2,3,4},用指针引用其中元素可以这样定义:

int a[5];
int* p=a;//将首元素地址赋给指针。

此时(p+i)即为a[i]的地址,*(p+i)即为a[i]中元素。

由此,引入二维数组指针。

二维数组与指针 

对于二维数组a[2][3],我们知道数组名在一维数组中表示首元素地址,而在二维数组中,老师也应该提到过,a表示的也是首地址,只不过是首行地址,即a是一个行指针。

那么,为什么这样说,什么是行指针和列指针呢?

行指针和列指针

有些自我发挥,便于记忆即可

行指针:二维数组中指向某一行的地址。

列指针:二维数组中指向某一元素的地址。

具体怎么理解,还是要往下看:

对于二维数组a[i][j],可看成由i个元素组成的一维数组,

而a[0],即为首元素地址,可看作a[0]+0,为首元素地址,

则a[0]+j等价于&a[0][j],表示的是二维数组中具体元素的地址,也就是列指针。

对该地址解引用:

*(a[i]+j)~a[i][j]~*(*(a+i)+j)

对于二维数组数组名a,同样看成一维数组,它表示“首元素”地址,只不过在这里,首元素指的是首行,即二维数组数组名表示首行地址,它是一个行指针。

下为例子:

行指针:a+1

              &a[1]    =>        &*(a+1)        =>        a+1

列指针:&a[1][0]        =>&*(a[1]+0)        =>        a[1]+0

              a[1]

              *(a+1)

   同时,行指针和列指针的转换为:&列=>行;*行=>列。

而区分它们的意义在于判断它们加减常数是针对行,还是列,这在后面学习中有很大作用。

综上,可以较为方便区分行指针和列指针。

数组指针和指针数组

这里小小提一嘴,这两种容易区分不开:

int * p[3]  ——>  指针数组(指向指针的数组,每个元素都是一维数组,解引用后可以得到每个数组各元素值)

如*(*(p+2)+1)等价于p[2][1],等效于二维数组的调用

int (*p)[3]  ——>  数组指针(指向数组的指针,定义时初始化为具有相同元素个数的一维数组的地址)

讲的不太好,只是当作学指针的一个笔记,多多包涵,(#^.^#)96293b3ce81a4711b53e858ca9f50339.jpeg

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值