我刚刚找到参考变量并且几乎没有问题,这有点让我烦恼.请参阅下面的代码.
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个值.
最后,假设"&"符号与我们在指针中使用的符号相同是正确的吗?
我知道参考变量的地址一旦设置就无法更改,
引用与地址无关.不要将引用视为特殊指针.
除非您在讨论编译器如何实现引用.但这是一个完全不同的抽象层次.在C++程序员级别,您不是从与编译器编写器相同的角度来看语言; 没有"参考变量的地址"这样的东西.对象具有地址,而引用只是命名对象的不同方式.
或者,正如我想向初学者解释它,参考是对象.
但是当我运行命令时,我的引用值如何变化但地址是否相同?
在以下行中:
Run Code Online (Sandbox Code Playgroud)int &ref = a; //&ref is 0x28fee
你宣称ref要参考a.使用上面的解释,ref是a.所以当你继续写下来&ref之后(使用该&字符来调用address-of运算符,而不是声明一个引用),会发生什么等同于写入时发生的事情&a.因此,结果是相同的并不奇怪.它是同一个对象,因此地址必须相同.
Run Code Online (Sandbox Code Playgroud)ref = b; //value of ref = 5, address is still 0x28fee
这和写作一样a = b;.它赋予bto 的值a,因为ref这只是另一种说法a.将值分配给ints 时,不会更改任何地址.
最后,假设"&"符号与我们在指针中使用的符号相同是正确的吗?
一点都不.重申我的观点:&在C++中有不同的含义.您可以使用它来声明引用或获取对象的地址.实际上,还有更多的含义,考虑到&它也是按位运算符,如同a & b.成对&,即&&扩展可能含义列表,以包括逻辑AND运算符和C++ 11右值引用.
从教学的角度来看,当然不幸的&是,参考声明和地址操作符过载.据我所知,&因为当时被选为参考文献,因此很难在refC++中添加新的关键字(如),因为与C的向后兼容性是当时的一个大问题,并且添加ref为关键字意味着C代码就像int ref = 0;不再编译一样.
C++必须至少引入一些新的关键字(例如throw),但在某些情况下,没有它们在技术上是可行的和/或政治上必要的.
| 归档时间: |
|
| 查看次数: |
2665 次 |
| 最近记录: |