按值调用的难题:解开价值保存之谜
在 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中文网其他相关文章!