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只看值不看类型等于裸奔

猜你喜欢

转载自blog.csdn.net/haduwi/article/details/106522267
今日推荐