gpt4 book ai didi

c++ - 为什么作为参数传递的引用可用于通过函数修改变量?

转载 作者:行者123 更新时间:2023-12-02 10:10:33 25 4
gpt4 key购买 nike

由于我陷入了缩短问题还是澄清问题之间,我不认为我可以用疑问句来理解。我试图通过以下示例来说明自己:
让我们看看一个无效的void函数,用于将变量减1:

#include <iostream>

using namespace std;

void decrease (int a)
{
a--;
}

int main ()
{
int x = 17;
decrease (x);
cout << x << endl;
}
如预期的那样,它将打印 17。原因非常清楚,因为当将变量传递给函数时,实际上传递的是原始变量的副本(它们具有相同的值,但是它们位于不同的地址中),因此对副本进行了所有修改。变量,并且函数终止后副本将销毁。
我们这里需要的是指针。如果我们像这样修改上面的代码段:
#include <iostream>

using namespace std;

void decrease (int* a)
{
(*a)--;
}

int main ()
{
int x = 17;
decrease (&x);
cout << x << endl;
}
之所以有效,是因为我们在 decrease (&x)行中传递的是 x地址的 复制。递减结果等于副本的值,因为它的值等于 x的地址,即递减效果地址的值,即原始 x保留的值。
到目前为止,一切都是可以理解的。但是,当我们通过如下引用解决问题时:
#include <iostream>

using namespace std;

void decrease (int&a)
{
a--;
}

int main ()
{
int x = 17;
int& y = x;
decrease (y);
cout << x << endl;
}
如何解释这种情况?当我们减少 x引用的 副本时,尝试减少 x的副本是否不一样?
如果是这样,是什么使引用在这里起作用?当第一个代码段不起作用时,为什么它起作用?
如何修改 x的实际值?
注意:我发现用户@Angew的 post不再为SO感到骄傲,因为它指出未指定引用是否占用内存。如他所说,如果我们认为引用在这种实现中占用内存,并且引用的行为就像指针,我认为它可以解释,但仍与用法混淆。
编辑:我正在使用C,我决定继续使用C++,这就是为什么我无法获取引用的逻辑。

最佳答案

让我们简单一点:
“引用”的含义是指特定变量。
您告诉编译器:“我想使用另一个名称来使用此变量,而不是进行复制”。
编译器如何完成此任务,取决于编写编译器的人(这是您链接的问题试图解释的内容)。
但是语法的含义是“自己使用变量”。
至于指针,它们只是保留一个地址。
它可以是任何地址,实际上只是一个数字。
您可以使用它进行数学运算,也可以将其中存储的数据重新解释为不同的类型,依此类推。
您演示的指针的使用只是多种可能的一种。
考虑它的另一种方法是,当变量通过引用传递给函数时,就好像该变量是全局变量一样,该函数可以触及它,只是使用参数名称(作为别名)而不是原始变量名称。

关于c++ - 为什么作为参数传递的引用可用于通过函数修改变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63798992/

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