文章目录
- 1、传引用
- 1.1、特点
- 1.2、使用
- 1.2.1、一般引用
- 1.2.2、常量引用
- 1.3、案例
- 1.3.1、常见变量引用做函数参数
- 1.3.2、结构体引用做函数参数
1、传引用
函数传参,几乎一直在用简单的值传递,或者传指针,前者生成一个源结构的副本,后者链表或者树的时候用的比较多,本文补充到一个类似值传递的函数调用方式,函数定义的传参位置却是地址接收方式,这就是传引用。
其实早就在王道见过,只是没注意其中的奥妙,怪就怪我线性表题目爱用数组解决,栈和队列喜欢用结构体内置函数的方式实现,完全用不到引用。
1.1、特点
- 仅从代码书写来看,整体上只有函数定义参数的这一个位置有所不同。
- 相比值传递,几乎无传参时间开销(传大型结构体、长字符串尤为明显)
1.2、使用
1.2.1、一般引用
void f(int &a,int &b){
//...
}
f(a,b);
函数声明:
void f(int &,int &);
1.2.2、常量引用
稍微讲究一点的用法,往往是定义一个输出函数的传入参数设为常引用,意味着无更改要求。
void showResult(const int &res){
cout<<res<<endl;
}
showResult(res);
函数声明:
void showResult(const int &);
1.3、案例
1.3.1、常见变量引用做函数参数
比如实现一个交换两个变量的值,过去确实只会值传递,像是涉及到改变值的操作,都会下意识的去写在main函数中,将结果在传给下一个需要相关值的函数。有了引用,main函数会变得更加简洁。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
void swap(int &x,int &y){
int t;
t =x;
x=y;
y=t;
}
int main(void){
int a = 1, b =2;
swap(a,b);
cout<<"a: "<<a<<" b: "<<b<<endl;
}
1.3.2、结构体引用做函数参数
除非参数结构很小,否则一般会通过引用将结构体传递给函数。