*解引用操作符,下标引用操作符[]和&操作符的配合

目录

一:解引用操作符功能

二:下标引用操作符的等价形式

三:取地址操作符取出数组地址解析

一:解引用操作符功能

   在用到操作符解引用的时候,我一开始以为是直接找到存储空间中的数据,可是当我看到&arr[0],并结合arr[0]本质上是*(arr+0),我就疑惑了,如果是转换成数据又怎么可以再被&(取地址),所以我觉得解引用应该是找到这个地址对应的存储空间,而不是直接找到数据,所以在下面代码中我之前是以为解引用是把数据给了printf。然后printf打印,现在看来,我把printf的作用想简单了,解引用提供的是那个内存空间,至于printf怎么把这个内存空间的数据打印出来,深究下去应该与printf源码有关。

二:下标引用操作符的等价形式

然后我提一下[]操作符,C语言标准规定,数组下标与指针的偏移量相同。通俗地理解,就是对数组下标的引用总是可以写成“一个指向数组的起始地址的指针加上偏移量再解引用”。比如int arr[3] ,调用最后一个元素就是用arr[2],就是因为最后一个元素地址与首元素地址间只差两个整型,此时数组为int类型,其数组名作为首元素地址为int类型,int类型步长为一个整形,所以只需要首元素地址加二便是跳过两个整型再解引用便能找到最后一个元素。这个操作数满足交换律,如果把这两个操作数调换位置也是一样的结果。

三:取地址操作符取出数组地址

   还有就是&arr[0]这是取出数组首元素地址,但如果是&arr,这就是取出数组地址,区别在于类型,类型决定步长(加一跳过的字节数称之为步长),前者加一跳过一个数组元素,后者加一跳过一个数组。

   下面还有些&结合数组的例子 

 1 &(arr+i)       2 &arr+i           3 &arr[i] 

    我们在前文提到,首先arr数组名单独的时候就是表示个首元素地址,但是当它和取地址操作符(&)配合后,会使得&arr有个特殊的含义,代表的是对这个数组取地址,而且数组的地址与数组首元素地址一样的,只是意义不同,为什么呢,因为这个取数组的地址出来,这个地址是数组类型,取数组元素地址出来,这地址是数组元素的类型虽然我没明确看到资料说地址是有类型的,但是从不同类型的变量取出来的地址的步长就是不一样例子1是标准未定义的,是对一个地址取地址,而例子2中的&arr是标准定义的取出数组的地址,加上一个i表示跳过几步,例子3是标准定义的取出数组元素地址。

我在这里困惑了一段时间,终有所得,希望能和大家交流心得。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小何只露尖尖角

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值