C语言:指针中 * 与 & 同时使用引发的思考

请看以下例子:

在这里插入图片描述


我的分析:

  •  *p 是指针指向的值,&*p 是指针指向的值的地址,也就是 指针指向的当前 地址,可以理解。
    
  • &p是指针自己的地址, * &p就是指版针变量本身了。  那指针自己的地址的值是多少呢?
    

正确理解:

第一种理解

  • * 用于语句里的指针变量时,表示指针指向的值。例如:printf("%d", *pa);
    
  • &用于语句里的普通变量时,表示求普通变量的地址。例如:int a; pa=&a;
    
  •   &*pa==*&pa    --用于指针变量
    
      这里 &*pa 和 *&pa 都等于 pa, 也就是 pa指向的变量的地址,这里正好都等于变量 a 的地址
    

第二种理解

  • 假如pa是一个变量,*pa是以pa为地址的内存所存储的值,&(*pa)就是那个值所在的内存对应的地址, 还是pa
    
  •  &pa就是pa变量的值所在的内存的地址(pa的地址),*(&pa)就是pa的地址对应的内存所存储的值,也是pa
    

总结:

针对指针变量 &* 和 *& 都是互为逆运算,等同于 * 和 & 抵消

其他的数据类型说抵消不准确

比如int a[10]; printf("%d", &*a),此时& *就不能抵消了,虽然输出的值是相等的,但是类型不同;

在这里插入图片描述


大佬语录: 学C只看值不看类型等于裸奔

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

m0rta1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值