C++ C++;为什么我得到这个输出。(这里是新手)
所以在下面的代码中,我一直在试图弄清楚为什么代码的输出结果是 X=2,Y=2 当我最初认为它是x=1和y=1时。我还是一个充满了C++的人,在这个学期里,有了一个比我更有知识的人的一点解释,希望能把这个概念融入我的脑海。C++ C++;为什么我得到这个输出。(这里是新手),c++,increment,ampersand,C++,Increment,Ampersand,所以在下面的代码中,我一直在试图弄清楚为什么代码的输出结果是 X=2,Y=2 当我最初认为它是x=1和y=1时。我还是一个充满了C++的人,在这个学期里,有了一个比我更有知识的人的一点解释,希望能把这个概念融入我的脑海。 int main() { int x = 0; int& y = x; y++; x++; std::cout << "x = " << x << " y = " << y
int main()
{
int x = 0;
int& y = x;
y++;
x++;
std::cout << "x = " << x << " y = " << y << std::endl;
}
intmain()
{
int x=0;
int&y=x;
y++;
x++;
std::coutx和y彼此没有区别。引用表示x的另一个名称是y。因此,当你调用y时,它调用x,这意味着如果你增加y,它增加x。然后你再次增加x,x变成2。因为y代表x,当你调用y时,它调用x,你再次看到2。关键点是引用符号的意思:
int& y = x;
它表示您正在为“x”分配别名,因此“y”实际上与“x”共享相同的内存地址(物理上)
做
将更改由“x”和“y”共享的内存地址内的值。与操作相同
x++;
因此,您对同一内存地址进行了2次递增,初始值为“0”,该值变为“2”
同样的想法,因为“x”和“y”都指向完全相同的内存地址,所以打印“x”和“y”将得到相同的值
我相信我的输出的原因是,即使y有一个&符号,我认为y是x的别名,因此x和y都被设置为0,直到它们递增,并将产生x=1和y=1的输出,但输出的是x=2和y=2。x和y彼此没有区别。引用意味着x的另一个名称是y。那么当你叫y,它叫x,这意味着如果你增加y,它就增加x。然后你再增加x,x变成2。因为y代表x,当你叫y时,它叫x,你又看到了2。@73memedream,你说对了。y
是别名x
。你描述的行为是如果y
是x
的副本,会发生什么。哦啊!我现在明白了。哇,我真傻……谢谢@ssovukluky
只是x
的别名,它们在内存中指的是同一个地址,只有不同的名称。所以影响一个的是另一个。事实上它们是一样的。这类问题只值得评论。
x++;