首页  >  文章  >  后端开发  >  为什么 C/C 中 `changeValue(value)` 不改变 `value` ?

为什么 C/C 中 `changeValue(value)` 不改变 `value` ?

DDD
DDD原创
2024-11-16 08:47:03299浏览

Why Does `changeValue(value)` Not Change `value` in C/C  ?

按值调用的难题:解开价值保存之谜

在 C/C 中,函数参数本质上是按值传递的。这意味着原始变量的副本被传递给函数,而不是原始变量本身。此行为可能会导致混乱,如以下代码片段所示:

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

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

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

  return 0;
}

执行此代码后,人们可能期望输出为“The value is: 6”。在函数调用之后。然而,令人惊讶的是,输出仍然是“The value is: 5”。造成这种行为的原因在于按值调用的复杂性。

调用函数changeValue() 时,会创建值5 的副本并将其传递给该函数。这意味着在函数内,值 6 被分配给副本,而原始值 5 保持不变。

要纠正此问题并修改原始变量,必须诉诸引用调用。该技术涉及将对原始变量的引用传递给函数。在这种情况下,函数可以修改原始值,反映调用函数中的更改。

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

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

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

  return 0;
}

现在,执行代码后,输出将是“The value is: 6”。这突出了按值调用和按引用调用之间的区别,以及根据程序的预期行为选择合适的调用的重要性。

以上是为什么 C/C 中 `changeValue(value)` 不改变 `value` ?的详细内容。更多信息请关注PHP中文网其他相关文章!

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