二维数组与指针

怎样理解 a[0]与*(a+0)等价,二维数组元素a[i][j]可表示成
*(*(a+i)+j), 不理解*(a+i)这里。

a是数组名,是一个指针常量,指向的是数组的首地址~~~所以a[0]<=>*(a+0)..[]运算符就是取偏移量,而*可以理解为解引用~就是取地址上的值~~
二维数组则有首地址,行地址,行首地址的分别~~
a[i][j]~~不用语言会有不同的解释,大部分都是行优先~~~如果是列优先的语言,上面那句话改下就行了~~
a是这个数组的首地址,&(a[i][0])是这个数组第i行的首地址,a[i]是这个数组的第i行的行地址~~其实后两者是一样的~
按行优先开始~~首先取行地址的偏移量 a[i]<=>*(a+i),然后在这个地址基础上再加上列地址的偏移量,记住
a[i]是第i行的行地址,不是“值”~~&(a[i][j])<=>*(a+i)+j,地址取到了~~现在进行解引用~~

*(&(a[i][j]))<=>a[i][j]<=>*(*(a+i)+j)~~



int *p[5],首先它是一个数组,它的大小是5,它里面存放的数据类型是int *,也就是整型指针。  所以它叫指针数组、 (从右向左解析这个表示)
int (*p)[5],首先p是一个指针,指向大小为5的数组,因此这叫数组指针。(括号优先)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值