复盘!!指针 ,地址 ,数组之间的联系

文章探讨了数组名在C/C++中的含义,数组指针的偏移量以及解引用操作。作者通过例子说明数组名实际上表示数组首元素地址,而对数组名取地址则得到整个数组的地址。文章指出,*(&a+1)的含义是数组的下一个元素地址,而非首元素,这涉及到数组元素大小的影响。最后,作者提出数组指针的内层解引用表示数组地址,第二层解引用得到首元素数据,并预告将研究与二维数组和二维指针的关系。
摘要由CSDN通过智能技术生成


前言

工作摸鱼 闲来无事


一、直接看题

在这里插入图片描述

二、直接上代码

在这里插入图片描述

所以,这个题目答案是5.

我来盘给你:int a[5] = {1,2,3,4,5};
1·数组名本身就是表示数组首元素地址
2·对数组名取地址:表示的是整个数组的地址,并且为int (*p)[5] 类型。
但是哈!!不管是数组名的含义还是对数组名取地址的含义,他们都是表示一个地址,而且这个地址两者一致不同的是:偏移量的不同。怎么解释?a+1表示的是a[1]的地址,偏移量只有一个数组元素。但是&a+1表示下一个数组的地址(也就是a[4]这个最后一个元素后面的那个地址),因为偏移量是一个数组。

为什么会是5?应该是 这个数组本来就是int类型的。你看那个地址嘛,就是相差4,刚好一个字节,所以后面偏回来应该是以数组类型决定的,所以不管是数组是char还是int还是啥,反正就是偏移一个数组元素的大小。

我其实还是有点想不清楚*(&a+1)的含义。
于是根据看下图:
在这里插入图片描述
在这里插入图片描述

所以:数组指针内层解引用表示数组的地址,第二层解引用表示数组首元素的数据。

那和二维指针有什么关系?
我有空了再去验证。(还会涉及到二维数组,数组指针)


总结

数组指针内层解引用表示数组的地址,第二层解引用表示数组首元素的数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值