引用
本质就是指针常量!
1.基本使用
作用:给变量起别名
语法:数据类型 &别名=原名;
示例:
int main(){
int a=10;
int &b=a;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
b=100;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
运行结果:
2.注意事项
引用必须初始化
int &b; //非法语句
引用初始化后不可改变
3.引用做函数参数
作用:函数传递参数时,可以利用引用让形参修饰实参
优点:可简化指针修改实参
#include <iostream>
using namespace std;
void myswap03(int &a,int &b){
int temp;
temp=a;
a=b;
b=temp;
}
int main(){
int x=10;
int y=20;
myswap03(x,y);
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
return 0;
}
运行结果:
4.引用做函数返回值
Attention! 不要返回局部变量的引用
#include <iostream>
using namespace std;
int &test02(){
int a=10;
return a; //非法语句,不可返回局部变量的引用returning address of local variable or temporary
}
int main(){
int &ref=test02();
cout<<"ref="<<ref<<endl;
cout<<"ref="<<ref<<endl; //该句结果错误,因为a的内存已经释放
return 0;
}
运行结果:
若函数返回值为引用,该函数调用可做左值
#include <iostream>
using namespace std;
int &test02(){
static int a=10;
return a; //此时a是静态变量,位于全局区,因此可以返回
}
int main(){
int &ref=test02();
cout<<"ref="<<ref<<endl;
cout<<"ref="<<ref<<endl;
test02()=1000; //若函数返回值为引用,该函数调用可做左值
cout<<"ref="<<ref<<endl;
cout<<"ref="<<ref<<endl;
return 0;
}
运行结果:
5.常量引用
作用:防止误操作
#include <iostream>
using namespace std;
void print(const int & ref){
ref=100; //此句非法,会报错。可防止此类操作
cout<<"a="<<ref<<endl;
}
int main(){
int a=10;
print(a);
return 0;
}