函数参数传递
- 在函数被调用时才分配形参的存储单元
- 实参可以是常量、变量或表达式
- 实参类型必须与形参相符
- 值传递是传递参数值,即单向传递
- 引用传递可以实现双向传递
- 常引用作参数可以保障实参数据的安全
传引用的开销比传值的开销小
传对象,传递过程中的时间开销会比较大
但是在传递引用的时候往往是双向的,但是我们希望是单向的。
引用类型
引用(&)是标识符的别名
例如:
int i,j;
int &ri = i; //定义int引用ri,并初始化为变量i的引用,相当于一个变量的别名
j = 10;
ri = j; //相当于i = j
- 一旦一个引用被初始化后,就不能改为指向其他对象。在他生存期内就一直和i绑定在一块
- 引用可以作为形参
举例说明
#include <iostream>
using namespace std;
void swap(int a,int b){ //一旦函数执行到swap内部时,a b 与 x y 的联系已经中断了。
int t = a;
a = b;
b = t;
}
void swap_y (int &a,int &b){ //定义函数的时候并不给参数分配空间
int t = a;
a = b;
b = t;
}
int main(){
int x = 5,y = 10;
cout << "x0 = " << x << "y0 = " << y << endl;
swap(x,y); //只有形实结合时,才能给形参分配空间
cout << "x = " << x << "y = " << y << endl; //从swap出来之后与子函数swal联系中断
swap_y(x,y); //在调用函数时才给形参分配空间,此时a是x的别名,b是y的别名
cout << "x_y = " << x << "y_y = " << y << endl;
return 0;
}
输出结果