当我执行以下操作时:
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.
答案 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;。您只需返回指示对象的地址即可。