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

时间:2016-04-02 16:23:16

标签: 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

我知道参考变量的地址一旦设置就无法更改,但是当我运行命令时,我的引用值是如何变化但地址是相同的?

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

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

2 个答案:

答案 0 :(得分:6)

  

我知道参考变量的地址不能改变一次   集,

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

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

或者,正如我想向初学者解释一样,引用对象。

  

但是当我运行命令时,我的引用的值如何变化但是   地址是一样的吗?

在以下行中:

int &ref = a;   //&ref is 0x28fee

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

&a

这与撰写ref = b; //value of ref = 5, address is still 0x28fee 相同。它将a = b;的值分配给b,因为a只是说ref的另一种方式。将值分配给a时,不会更改任何地址。

  

最后,假设“&”是正确的。标志和我们一样   在指针中使用?

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

从教学的角度来看,当然遗憾的是&&因参考声明和地址操作符而被重载。据我所知,&被选为参考文献,因为当时很难将新的关键字(如&)添加到C ++中,因为与C的向后兼容性在当时是一个巨大的问题,并且添加ref作为关键字意味着像ref这样的C代码将不再编译。

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

答案 1 :(得分:3)

  

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

引用是别名,当您为ref分配值时,实际上将其分配给变量a。你为什么期望地址改变?

  

或者可能不应该将价值变为5

这是正确的,当您在示例中更改引用ref的值时,您也可以将ref替换为a,因此您拥有a = b

  

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

我不确定你在这里问的是什么,&用于表示你想要一个引用,这里不使用它来获取变量a的地址。