一、本质
-
传值(Pass by Value) :拷贝一份给别人,别人改复印件,原件不动。
-
传引用(Pass by Reference) :直接给原件,别人改的就是你的原件。
二、代码对比(C++)
1. 传值
cpp
void func(int x) { // x 是 a 的复制品
x = 100; // 只改复制品
}
int main() {
int a = 10;
func(a); // 传值
cout << a; // 输出:10(原值没变!)
}
2. 传引用
cpp
void func(int& x) { // x 就是 a 本身(别名)
x = 100; // 直接改 a
}
int main() {
int a = 10;
func(a); // 传引用
cout << a; // 输出:100(原值被改了!)
}
三、区别
| 对比点 | 传值 | 传引用 |
|---|---|---|
| 是否复制数据 | 会复制,耗内存、速度慢 | 不复制,省内存、速度极快 |
| 能否修改原值 | 不能改,安全 | 能改,灵活 |
| 适用场景 | 简单小数据、不想被改 | 大数据、需要修改、提高性能 |
四、应用场景
-
数据小 (int、char)→ 传值(安全、简单)
-
数据大 (数组、对象、字符串)→ 传引用(快、省内存)
-
想在函数里修改变量 → 传引用
-
不想被修改但要高效 → const 传引用(最常用!)
cpp
// 不修改数据,又要高效 → 万能写法
void func(const int& x) { ... }