引用
作用: 给变量起别名
语法: 数据类型 &别名=原名
int a=10;
int &b=a; //b引用a
引用注意事项
- 引用必须初始化
int &b; //错误格式,引用类型必须初始化
- 引用在初始化后不能再改变
int a=10,c=30;
int &b=a;
&b=c; //错误使用,引用在初始化后不能更改
引用做函数参数
作用: 函数传参时,可以利用引用的技术让形参修饰实参
优点: 可以简化指针修改实参
void exchange(int &pa,int &pb){
int temp=pa;
pa=pb;
pb=temp;
}
int main(){
int a=10,b=20;
cout<<"a="<<a<<"\tb="<<b<<endl;
exchange(a,b); //引用传递,形参会修饰实参
cout<<"a="<<a<<"\tb="<<b<<endl;
system("pause");
return 0;
}
引用做函数返回值
作用: 引用是可以作为函数的返回值存在的。
注意: 不要返回局部变量引用。
int & test01(){ //子函数中的局部变量在函数返回后,所占用的栈区会被程序自动释放
int a=10;
return a;
}
int & test01(){ //静态变量的引用可作为函数返回值
static int a=10; //静态static修饰的变量区在子函数返回后不会被释放
return a;
}
用法: 函数调用作为左值
int &a=test01();
cout<<"a="<<a<<endl;
cout<<"a="<<a<<endl;
test01()=20; //引用函数调用也可以作为左值赋值
cout<<"a="<<a<<endl;
cout<<"a="<<a<<endl;
system("pause");
引用的本质
引用的本质在C++内部实现是一个指针常量。
void func(int & a){
a=20;
}
int main(){
int a=10;
int &ra=a;
ra=5;
cout<<"a="<<a<<endl;
func(a);
cout<<"a="<<a<<endl;
system("pause");
return 0;
}
常量引用
作用: 常量引用主要用来修饰形参,防止误操作。
在函数形参列表中,可以加const修饰形参,防止形参改变实参。
void show(const int & a){ //形参添加const属性,防止误操作
cout<<a<<endl;
}
int main(){
int a=10;
const int &ref=10; //加上const后,编译器将代码修改 相当于:int temp=10; const int &ref=temp;
show(a);
a=100;
show(a);
system("pause");
return 0;
}