二维数组名的本质与指针

我们知道,一维数组名中,数组名代表数组中第一个元素的地址。那么二维数组这一设定是否有变?答案是有的。

在这之前,我们先搞明白二维数组数组名+[ ]的意义。

图1

假定一个二维数组arr[3][5]

在上方图1中我们可以看到arr[n]指向第n行的第一个元素,arr[n]实际上是数组对应行第一个元素的地址。

那么看下面图二来对比数组名arr和arr[n]的区别

图2

在上图2中可以看到arr是地址,因为arr可以用%p打印出来

且从打印的前两行看出arr的步长是20,而arr的第一行元素有五个,每个元素都是4个字节,这里可以知道arr的步长是整一行的的元素总大小。

 从打印的第1和第3行看出arr+1转到下一行,而arr[1]指向第2行第一个元素与之地址相对应。

结论:二维数组的数组名是指向第一行整一行的地址

那么我们再来观察其解引用的效果,如下图3

图3

图4

图3:数组名解引用后仍是地址,而arr[n]变成了某个元素的数值,我们可以知道,arr指向的是一行的地址,而解引用后就相当于指向该行第一个元素的地址

图4:数组名解引用后与指向某个元素的地址相一致,再根据arr[n]指向该行第一个元素,再次推导

结论:*arr解引用后变成指向第一行第一个元素的地址,*(arr+n)与arr[n]相同

下面我们来验证一下

图5

 图5中验证了我们的结论:

1.二维数组的数组名是指向某一行整行的地址;arr+n相当于&arr[n]

2.*arr解引用后变成指向某行某元素的地址;*(arr+n)与arr[n]相同

3.解引用两次二维数组的数组名就可以取出数组具体某个元素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值