文章目录
- 2.1 引用的基本使用
- 2.2 引用注意事项
- 2.3 引用做函数参数
- 2.4 引用做函数返回值
- 2.5 引用的本质
- 2.6 常量引用
2.1 引用的基本使用
作用:给变量起别名
语法:数据类型 &别名 = 原名
int a=10;
int &b =20;
b=20;
cout<<a<<endl;
//输出结果为20
2.2 引用注意事项
引用必须要初始化
int &b;//错误
引用一旦初始化后,就不能更改了
2.3 引用做函数参数
作用:函数传参时,可以利用引用的技术让参数修饰形参
优点:可以简化指针修改实参
#include<iostream>
using namespace std;
//值传递
void myswap1(int a,int b){
int temp=a;
a=b;
b=temp;
}
//地址传递
void myswap2(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
//引用传递
void myswap3(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int main(){
int a=10;
int b=20;
myswap1(a,b);//值传递,形参不会修饰实参
cout<<"a="<<a<<" "<<"b="<<b<<endl;
myswap2(&a,&b);//地址传递,形参会修饰实参
cout<<"a="<<a<<" "<<"b="<<b<<endl;
myswap1(a,b);//引用传递,形参会修饰实参
cout<<"a="<<a<<" "<<"b="<<b<<endl;
return 0;
}
结果:
总结:通过引用参数产生的效果同按地址传递是一样。
2.4 引用做函数返回值
注意:
-
不要返回局部变量的引用
-
函数的调用可以作为左值
#include<iostream>
using namespace std;
//错误示范 返回局部变量
//void test1(){
// int a=10;//存放在栈区
// return a;
//}
//函数的调用可以作为左值
int &test2(){
static int a=10; //静态变量存放在全局区
return a;
}
int main(){
//int &r=test1();
int &r2=test2();
cout<<"r2="<<r2<<endl;
cout<<"r2="<<r2<<endl;
test2()=1000;//如果函数的返回值是引用,这个函数调用可以作为左值
cout<<"r2="<<r2<<endl;
cout<<"r2="<<r2<<endl;
return 0;
}
2.5 引用的本质
本质:引用的本质在c++内部实现是一个指针常量
2.6 常量引用
作用:常量引用用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
#include<iostream>
using namespace std;
//使用场景:用来修饰形参
//打印数据函数
void showvalue(const int &val){
cout<<"val= "<<val<<endl;
}
int main(){
// int a=10;
//int &r=10; 引用必须引一块合法的内存空间
// const int &r=10;
//加上const后,代码被编译器修改为:int temp=10; const int &r =temp;
int a=10;
showvalue(a);
return 0;
}