首页 >后端开发 >C++ >为什么按值调用不修改原始变量?

为什么按值调用不修改原始变量?

DDD
DDD原创
2024-11-21 18:43:13833浏览

Why Doesn't Call-by-Value Modify the Original Variable?

按值调用:了解限制

考虑这个按值调用示例,其中我们尝试修改输入的值函数内的参数:

#include <iostream>
using namespace std;

void changeValue(int value);

int main()
{
  int value = 5;
  changeValue(value);

  cout << "The value is : " << value << "." << endl;

  return 0;
}

void changeValue(int value)
{
  value = 6;
}

令人惊讶的是,尽管我们努力改变,输出仍然是 5到 6. 这种行为源于 C/C 中按值调用的基本原理。

按值调用的本质

调用中按值,原始变量的副本作为参数传递给函数。函数内对此副本所做的任何修改都仅限于该局部范围,并且不会影响原始变量。

在我们的示例中,函数 changeValue 从 main() 接收值的副本。对此副本所做的任何更改都不会影响原始值变量。

解决方案:按引用传递

要从函数内修改原始变量,我们必须采用引用传递。在 C/C 中,这表示如下:

void changeValue(int &amp;value);

通过在函数签名中使用 &,我们创建对原始变量的引用(别名)。对引用所做的任何更改也会修改原始变量。

传递引用示例

void changeValue(int &amp;value)
{
  value = 6;
}

现在,当我们在 main() 中调用 changeValue 时,对值的引用被传递给函数,允许它修改原始值:

int main()
{
  int value = 5;
  changeValue(value);

  cout << "The value is : " << value << "." << endl;

  return 0;
}

在这种情况下,输出正确反映修改后的值:6.

以上是为什么按值调用不修改原始变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn