我对以下代码的输出感到困惑
#include <iostream>
using namespace std;
int main()
{
int i;
double d;
int r=i;
double s=d;
i=5;
cout<<"value of i:"<<i<<endl;
cout<<"value of i reference:"<<r<<endl;
d=11.7;
cout<<"value of d:"<<d<<endl;
cout<<"value of d reference:"<<s<<endl;
cin.ignore();
return 0;
}
输出如下 i的值:5 值的参考:4370436 d值:11.7 d参考值:1.78734e-307
我实际上并不知道为什么i reference和d reference的值是这样的。我知道如果我添加&#34;&amp;&#34;对于i和d引用的定义,它将作为参考。但我想我不完全理解参考的含义。任何人都可以解释为什么在这段代码中输出是这样的。非常感谢!
答案 0 :(得分:0)
您的代码中没有引用。
r
和s
具有未指定的值,因为i
和d
(尚未初始化)也在您执行复制初始化时执行。关键是复制初始化就是: copy 。
例如,r
是一个新的,独立的,无关的整数 - 在初始化时 - 当时采用i
的值。那就是它! r
没有&#34;关注&#34;更改为i
。
你似乎至少部分地理解,正如你的矛盾陈述&#34;我知道如果我将&
添加到i和d引用的定义中,那么它将作为参考和#34工作; 至少表明您知道&
与引用有关。实际上,使用int
/ double
类型而不是类型int&
/ double&
意味着您的对象目前不是所有。< / p>
答案 1 :(得分:0)
由于@Lightness Races in Orbit解释了输出,因此在初始化 i 之前,您将 i 的值复制到 r 。在 main 函数中声明 i 之后,它具有垃圾值,您将该垃圾值分配给 r 。
我已经编辑了你的代码,并添加了对它的引用来解释引用:
#include <iostream>
using namespace std;
int main()
{
int i;
int &r=i;
i=5;
cout<<"value of i:"<<i<<endl;
cout<<"value of i reference:"<<r<<endl;
r = 6; // See this
cout<<"value of i:"<<i<<endl;// Value of i also becomes 6
i = 9;
cout<<"value of i reference:"<<r<<endl;// Value of r also becomes 9
cin.ignore();
return 0;
}
现在输出是:
value of i:5
value of i reference:5
value of i:6
value of i reference:9
此处, r 是对 i 的引用。 r 和 i 都指向同一个变量。这就像为同一个人有两个名字。如果您对其中任何一个进行某些操作,更改也会反映到其他操作上。更改 r 和 i 的值后,请参阅输出。