引用变量的地址和值C++

Saf*_*rim 5 c++ reference

我刚刚找到参考变量并且几乎没有问题,这有点让我烦恼.请参阅下面的代码.

int a = 3;      // &a is 0x28fee
int b = 5;      // &b is 0x16faa
int &ref = a;   // &ref is 0x28fee
ref = b;        // value of ref = 5, address is still 0x28fee
Run Code Online (Sandbox Code Playgroud)

我知道一旦设置了引用变量的地址就不能改变,但是当我运行命令时,我的引用值如何变化但地址是否相同?

并且由于地址是相同的,因此ref的值仍然不是3,或者也许不应该将值变为5,因为一个地址如何具有2个值.

最后,假设"&"符号与我们在指针中使用的符号相同是正确的吗?

Chr*_*ckl 9

我知道参考变量的地址一旦设置就无法更改,

引用与地址无关.不要将引用视为特殊指针.

除非您在讨论编译器如何实现引用.但这是一个完全不同的抽象层次.在C++程序员级别,您不是从与编译器编写器相同的角度来看语言; 没有"参考变量的地址"这样的东西.对象具有地址,而引用只是命名对象的不同方式.

或者,正如我想向初学者解释它,参考对象.

但是当我运行命令时,我的引用值如何变化但地址是否相同?

在以下行中:

int &ref = a;   //&ref is 0x28fee
Run Code Online (Sandbox Code Playgroud)

你宣称ref要参考a.使用上面的解释,refa.所以当你继续写下来&ref之后(使用该&字符来调用address-of运算符,而不是声明一个引用),会发生什么等同于写入时发生的事情&a.因此,结果是相同的并不奇怪.它是同一个对象,因此地址必须相同.

ref = b;        //value of ref = 5, address is still 0x28fee
Run Code Online (Sandbox Code Playgroud)

这和写作一样a = b;.它赋予bto 的值a,因为ref这只是另一种说法a.将值分配给ints 时,不会更改任何地址.

最后,假设"&"符号与我们在指针中使用的符号相同是正确的吗?

一点都不.重申我的观点:&在C++中有不同的含义.您可以使用它来声明引用获取对象的地址.实际上,还有更多的含义,考虑到&它也是按位运算符,如同a & b.成对&,即&&扩展可能含义列表,以包括逻辑AND运算符和C++ 11右值引用.


从教学的角度来看,当然不幸的&是,参考声明和地址操作符过载.据我所知,&因为当时被选为参考文献,因此很难在refC++中添加新的关键字(如),因为与C的向后兼容性是当时的一个大问题,并且添加ref为关键字意味着C代码就像int ref = 0;不再编译一样.

C++必须至少引入一些新的关键字(例如throw),但在某些情况下,没有它们在技术上是可行的和/或政治上必要的.