铅笔

在你的害怕中坚持的越多,你就会越自信
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

*&p理解

Posted on 2019-04-25 10:36  黑色の铅笔  阅读(611)  评论(0编辑  收藏  举报

要明白这个需明白两个基础:

  • 运算符*优先级高于&,
  • 两个运算符都是从右向左结合运算

所以, *&a 的意思就是先运算 *,得到 指针,再通过 &,获取指针的引用

如果不理解,继续下面讨论


  • 引入
int a=10;
int p=a;

这种情况,p与a是不同的变量,这里是将a的值赋给p

int &p=a; 

即 p是a 的别名,p和a其实是同一个整形变量,两个占用同一块内存空间,如果有 p=15;那么a也是15,修改p与修改a是完全等价的

  • 拓展
int *a=new int(0);
int * &p=a; //①
...

很容易理解,把 int * 看成一个类型即定义一个指针的类型,然后该指针是一个引用,a就是一个整型指针,即p指针是a指针的别名


也可以使用“右左法”:

int * &p=a; 

根据优先级和结合性质(右->左)

  1. p先和*结合,是一个指针
  2. 指针p和&结合,是一个引用,
  3. 综合:p就是一个指针,该指针为另一个指针的引用,即为一个指针的别名了。