我是靠谱客的博主 老迟到书包,这篇文章主要介绍C语言:指针中 * 与 & 同时使用引发的思考,现在分享给大家,希望可以做个参考。

请看以下例子:

在这里插入图片描述


我的分析:

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

正确理解:

第一种理解

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

第二种理解

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

总结:

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

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

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

在这里插入图片描述


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

最后

以上就是老迟到书包最近收集整理的关于C语言:指针中 * 与 & 同时使用引发的思考的全部内容,更多相关C语言:指针中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部