gpt4 book ai didi

c++ - 为什么第二个输出是6?

转载 作者:行者123 更新时间:2023-11-28 00:05:23 24 4
gpt4 key购买 nike

void addOne(int &y)
{
y = y + 1;
}

int main()
{
int x = 5;
std::cout << "x = " << x << '\n';
addOne(x);
std::cout << "x = " << x << '\n';
return 0;
}

抱歉,如果这是一个基本问题。但为什么 y = y + 1 是 6?

最佳答案

最初,将引用视为指针的语法糖可能会有所帮助。

考虑以下几点:

int main() {
int x = 5;
int *px = &x;
*px = 8;

cout << x << endl;

return 0;
}

如您所料,这会打印出 8。 (如果您没想到,那么在处理引用之前可能值得阅读 introduction to pointers。)

然后,引用变量可以被认为是一个指针变量,其语法是常规变量的语法。以下等同于前面的示例:

int main() {
int x = 5;
int &rx = x;
rx = 8;

cout << x << endl;

return 0;
}

也就是说,rx 成为对 x引用,因此无论何时更改 rx,您都会更改x 也是如此,因为这两个名称指的是同一事物...或者换句话说,rx 绑定(bind)到一个内存位置,< strong>不是值,设置 rx 会更改那个内存位置的内容

从某种意义上说,rx 有点不可见 - 它没有自己的存在,它只存在于 x 是什么(这是为什么必须在声明引用时对其进行初始化,即不能在函数中执行 int ℞ 并让它挂起)。

所以当你有:

void addOne(int &y)
{
y = y + 1;
}

这是一个函数,其参数是对传入内容的引用...因此当参数引用更改时,引用所指的内容也会更改。

所以当你这样调用它时:

int main()
{
int x = 5;
std::cout << "x = " << x << '\n';
addOne(x);
std::cout << "x = " << x << '\n';
return 0;
}

这会调用 addOnex,从而将 int & 引用 y 初始化为 x,因此每当 y 发生变化时,x 也会发生变化...因此 x5 发生变化> 到 5 + 1,即 6

您可以将其视为等同于以下内容:

void addOne(int *py)
{
*py = *py + 1;
}

int main()
{
int x = 5;
std::cout << "x = " << x << '\n';
addOne(&x);
std::cout << "x = " << x << '\n';
return 0;
}

要了解为什么要使用引用而不是指针,请参阅 this question .

关于c++ - 为什么第二个输出是6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35967946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com