引用传递
本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 41 课,共 56 课。
向函数传递参数时,C++ 通常会创建这些值的副本。这意味着函数内部的更改不会影响原始变量。引用传递可以改变这种行为,让函数直接操作原始变量。
要通过引用传递,请在函数声明中的参数类型后添加 & 符号:
void doubleValue(int& number) {
number = number * 2; // 修改原变量
}调用此函数时,在函数内部对参数所做的任何更改都会直接修改传入的原始变量。这在你希望函数修改其参数,或处理大型对象且复制对象效率低下时特别有用。
引用传递避免了复制数据的开销,让程序运行得更快、更节省内存,尤其是在处理向量或映射等复杂数据结构时。
挑战
简单创建一个函数,通过函数参数直接修改变量,以此演示引用传递。这个挑战将测试你对 & 符号的理解,看看它如何让函数操作原始变量,而不是副本。
将提供以下输入:
- 一个整数
value1,表示第一个数字 - 一个整数
value2,表示第二个数字 - 一个整数
value3,表示第三个数字
你的程序应该:
- 创建一个名为
tripleValues的函数,通过引用接收三个整数参数 - 在函数内部,将每个参数乘以 3
- 在 main 函数中,读取三个输入值并将它们存入变量
- 在调用函数前打印原始值
- 使用三个变量调用
tripleValues函数 - 在函数调用后打印修改后的值,以显示它们已发生变化
请使用以下确切的输出格式:
函数调用前:
Original values: [value1] [value2] [value3]函数调用后:
Tripled values: [new_value1] [new_value2] [new_value3]函数签名应在每个参数类型后使用 & 符号来表示引用传递:void tripleValues(int& a, int& b, int& c)。这样,函数就可以直接修改传入的原始变量,从而展示值传递和引用传递之间的关键区别。函数调用后,main 中的变量会永久改变,这证明函数操作的是原始内存位置,而不是副本。
亲手试试
#include <iostream>
using namespace std;
// TODO:在这里创建 tripleValues 函数
int main() {
// 读取输入值
int value1, value2, value3;
cin >> value1 >> value2 >> value3;
// 输出原始值
cout << "Original values: " << value1 << " " << value2 << " " << value3 << endl;
// TODO:在这里调用 tripleValues 函数
// 输出修改后的值
cout << "Tripled values: " << value1 << " " << value2 << " " << value3 << endl;
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C++ 在线编译器