C++函数传参int a,int &a,const int &a的区别
# | 传参方式 | 作用 |
---|
int a | 值传递 | 无法改变a的值 |
int *a | 地址传递 | 传入的是a是一个地址 |
int &a | 引用传递 | 传入的是一个指向a的指针,可直接修改a的值 |
const int &a | 不改变值的引用传递 | 提高传参效率,同时不允许修改a的值 |
1. int a 值传递
- 无法改变原参数的值
- 纯粹用来传入一个数值而已,计算机内部通过一次复制实现
void Swap(int a, int b){
int tmp = a;
a = b;
b = tmp;
}
2. int *a 地址传递
- 传入的a是一个地址,因此可以修改原参数的值
- 调用时要写成 f(&a) 的形式
void Swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
Swap(&a,&b);
3. int &a 引用传递
- 传入函数的实际就是原参数,因此称作“引用传递”
- 所以当然可以修改原参数的值
void Swap(int &a, int &b){
int tmp = a;
a = b;
b = tmp;
}
Swap(a,b);
4. const int &a
- 高效传递 + 不改变原参
- 因为 int a 值传递的过程,计算机要做一次数值的复制,当数据特别大时,这必然造成了时间和资源的浪费,因此采用引用传递
- 引用传递的同时避免对原参数造成修改,因此采用const避免这个问题