c++中的引用
## **C++引用的基本使用**
> **作用:给变量起别名
> 语法:数据类型 & 别名 = 原名
**
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/ad291aeda2023c365e736e24a58eeb02.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/85ad147ef24facfba86bd9de4d8c2529.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/d729d16658419017a2e81007a65259b0.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 二、引用的注意事项****
> **有两点:
> 1.引用要初始化
> 2.初始化之后值不能发生改变**
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/647d12541fd2833c877c5f29f11eb20f.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 三、引用做函数参数
> **我们之前是不是学过函数参数有两种传递方式,我们今天要新增一种传递方式为引用传递。
> 1.值传递
> 2.地址传递
> 3.引用传递**
1.值传递
```
void swap(int a, int b) {
int tmp = a;
a = b;
b = tmp;
}
int main() {
int a = 10;
int b = 20;
swap(a,b);
cout<<"a的值为"<<a<<endl;
cout << "b的值为" <<b<< endl;
system("pause");
return 0;
}
```
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/7b8910dbc4570d3820d7450e7fae0231.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
2.地址传递
```
void swap(int * a, int * b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main() {
int a = 10;
int b = 20;
swap(&a, &b);
cout<< "a的值为" <<a<<endl;
cout<< "b的值为" <<b<<endl;
system("pause");
return 0;
}
```
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/7b8910dbc4570d3820d7450e7fae0231.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
3.引用传递
```
void swap(int & a, int &b) {
int tmp = a;
a = b;
b = tmp;
}
int main() {
int a = 10;
int b = 20;
swap(a, b);
cout<< "a的值为" <<a<<endl;
cout<< "b的值为" <<b<<endl;
system("pause");
return 0;
}
```
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/7b8910dbc4570d3820d7450e7fae0231.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 四、引用做函数的返回值
> **引用是可以作为函数的返回值存在的
> 注意两点:
> 1.不要返回局部变量的引用
> 2.函数调用可以作为左值存在
> **
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/184d76332d85f22bca5be67da2950b58.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/fc6548cd069ffa339e508661d9c9810f.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/1b6f0cc7f77ace4bfb84e7a06de80e31.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### **五、引用的本质**
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/4f663d88c5c558f2cdf1f3413e736d44.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/d802cc242760d25145f1af115edea867.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/09/3184d4ad6b344ad302caa18450a80394.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)