【入门级-C++程序设计:9、函数与递归-传值参数与传引用参数】
在 C++ 中,函数参数传递有两种主要方式:传值参数(pass-by-value)和传引用参数(pass-by-reference),它们在内存处理和使用效果上有显著区别。
1、 传值参数
原理:将实参的值复制一份,传递给函数的形参。函数内部对形参的修改不会影响外部实参。
特点:会创建参数的副本,额外占用内存;适合传递基本数据类型或占用内存少的小型对象。
举例说明:
#include
using namespace std;
// 传值参数:修改形参不影响实参
void increment(int num)
num++;
cout << “函数内:” << num << endl; // 输出 11
}
int main() {
int a = 10;
increment(a); // 将形参a进行传递
cout << “函数外:” << a << endl; // 输出 10(未被修改)
return 0;
}
main函数中a为10,进行函数调用的时候,只是将实参a的值传递给形参num,此时num的值也为10,在子函数increment中,输出num为11。
2、传引用参数
原理:将实参的内存地址传递给形参,形参是实参的 “别名”。函数内部对形参的修改会直接影响外部实参。
声明方式:在参数类型后加“&”符号。
特点:不创建副本,直接操作原变量;适合传递大型对象(避免复制开销)或需要修改实参的场景。
举例说明:
#include
using namespace std;
// 传引用参数:修改形参会影响实参
void increment(int &num) { // & 表示引用
num++;
cout << “函数内:” << num << endl; // 输出 11
}
int main() {
int a = 10;
increment(a); // 将形参a进行传递
cout << “函数外:” << a << endl; // 输出 11(被修改)
return 0;
}
3、常量引用
如果希望传递引用(避免参数复制)但不允许修改原始数据,可以使用常量引用(const &)
举例说明:
#include
using namespace std;
// 常量引用:不能修改参数值
void print(const int &num) {
//num++; // 错误:常量引用不可修改
cout << num << endl;
}
int main() {
int a = 10;
print(a); // 输出 10
return 0;
}
总结:
若只需使用参数的值,无需修改原始数据:优先用传值(简单类型)或常量引用(大型数据)。
若需要修改原始数据,或传递大型数据以提高效率:使用传引用。
常量引用(const &)是传递大型只读数据的最佳实践(兼顾效率和安全性)。