一维数组名与二维数组名的差别

一维数组名和二维数组名都可以看做是指针,不同在于:

(1)一维数组名相当于指向该数组数据类型的指针;

(2)二维数组名相当于指向该数组中的一维数组的数组指针。

比如,定义一维数组 int a[i] 和二维数组 int b[i][j],a相当于int (*),而b相当于int (*)[j]。

因此,想要获得 a[i] 中第 x 个元素,可以直接使用 *(a+x)。而想要获得 b[i][j] 中第 x 行第 y 个元素,则需用 *(*(b+x)+y),因为 b 相当于数组指针,(b+x) 则是指向第 x 个数组的指针,注意,是指向数组,而不是数组元素!所以 *(b+x) 获得的是第 x 个数组的数组名,即该数组的首元素地址,这时再结合偏移量 y 就可以取得该元素。


可以这样来记忆:

..[n] 编译后其实等价于 *(..+n) ,因此,a[x] = *(a+x),b[x] = *(b+x),b[x][y] = *(*(b+x)+y)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值