按值调用:了解限制
考虑这个按值调用示例,其中我们尝试修改输入的值函数内的参数:
#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 &value);
通过在函数签名中使用 &,我们创建对原始变量的引用(别名)。对引用所做的任何更改也会修改原始变量。
传递引用示例
void changeValue(int &value) { value = 6; }
现在,当我们在 main() 中调用 changeValue 时,对值的引用被传递给函数,允许它修改原始值:
int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
在这种情况下,输出正确反映修改后的值:6.
以上是为什么按值调用不修改原始变量?的详细内容。更多信息请关注PHP中文网其他相关文章!