c ++中运算符的地址

时间:2015-12-19 02:02:50

标签: c++ c++11

当我执行以下操作时:

1. int y = 5;
2. int &a = y;
3. cout << &a << endl; // the address of a is the same address of y
4. cout << a << endl;  // this has the value of y, which is 5.
  1. 为什么 a 的地址与 y 相同?我知道更改 a 也会改变 y
  2. 但你怎么看第2行?您是否读过 a 的地址包含 y 的值?
  3. 这是否意味着 a y 共享相同的物理内存位置?或者是否有2个不同的内存位置具有相同的地址?

2 个答案:

答案 0 :(得分:5)

在第2行中,您正在创建C ++ reference,而不是使用运算符的地址。对于所有用途(包括获取其地址),该引用会导致a大致相当于y

有效地,符号a只是y的另一个名称。

答案 1 :(得分:1)

引用(广义上)只是指针的语法糖,所以a实际上只是指向y包含自动解除引用的指针。 (稍微多一点,但是为了讨论起见,我们可以这样想而不会误导任何事情。)所以当你要求a的地址时,你真的要求底层指针值,已被设定为&amp; y。

当你要求a的值时,它会自动取消引用指针,因此它会给你一个&amp; y的值。当然,这个值具有y值。

  

这是否意味着a和y共享相同的物理内存位置?

不,有两个不同的内存位置。一个持有一个int值,另一个持有指向该int值的指针。

  

或者是否有2个不同的内存位置具有相同的地址?

差不多,是的。但是,y没有保存指针/地址值;它实际上是持有整数值本身。 (请记住,y是堆栈内存,而不是指向堆对象的指针。)

当您获取参考的地址时,您没有回到&#34;指向该参考的指针&#34;。您只需返回指示对象的地址即可。