C语言星号作用区分和多级指针的理解

首先对指针分级要有一个比较清晰的认知:

  1. 变量本身一定会有一个内存地址,不管他是基本类型变量或是指针型变量
  2. 指针型变量所保存的值是他指向的内存的地址

定义的时候 int* 代表指向一块int变量内存地址的指针int** 代表指向一块int变量指针的内存的指针

这么说可能不太好理解,看下面这个图可以帮助理解

在这里插入图片描述

可以看到变量app指向的实际上是指针ap,而不是a,我们改变ap的指向也不会影响到app的指向。

这个图也可以很好的解决为什么打印&a是一个地址,而打印&ap是另一个地址,因为&ap指向的并不是a的地址。

然后要区分一下*号所处的语义上下文

比如,int * a ,这个情况下,号所处上下文是变量定义的上下文,这个时候号的作用实际上是这么来看的int* a,可以把int和*看成一个整体,语义就是这是一个指向int型变量的指针。

另一种情况下*a,这个情况下a必然是个指针,因为 * 号的语义是去a地址(所以a才必须是指针)取出对应的值。

理解了以上两点,基本就理解了多级指针了

比如 * * * * p,是在做什么呢,按照之前逻辑来分析,大概就是

在这里插入图片描述

通过*层层取出地址对应的值,最后指向结果PVVVV,PVVVV是类型的值取决于它自己存放的类型,不出错的情况下PVVVV就是PVVV的指针的指向类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值