一、基本使用
本质:是一个指针常量
作用:给变量起别名
语法:数据类型 &别名=原名
int a=10;
int &b=a;
注:
1、引用必须初始化
int &b;//错误
2、引用在初始化后不可改变,但可以进行赋值操作
二、引用与函数
1、引用做函数的参数
可以简化指针修改实参,作用与地址传递相同
void myswap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int main(){
int a=10,b=20;
myswap(a,b);
}
2、引用做函数返回值
(1)不要返回局部变量的引用
int& test01(){
int a=10;//局部变量存放在四区中的栈区
return a;
}
int main(){
int &ref=test01();
cout<<"ref="<<ref<<endl;//第一次可以正常输出是因为编译器做了保留
cout<<"ref="<<ref<<endl;//第二次不能正常输出
return 0;
}
(2)函数的调用可以作为左值
int& test02(){
static int a=10;//静态变量存放在四区中的全局区
return a;
}
int main(){
int &ref=test02();
cout<<"ref="<<ref<<endl;//第一次可以正常输出
cout<<"ref="<<ref<<endl;//第二次可以正常输出
test02()=1000;//对原名进行赋值
cout<<"ref="<<ref<<endl;//通过别名输出,结果为1000
return 0;
}
三、常量引用
可以防止在函数体中改变实参
int &ref=10;//不合法,引用必须引一块合法内存空间
const int &ref=10;//合法
四、引用的其他注意事项
1、不能建立引用的数组
char c[6]="hello";
char &rc[6]=c; //错误
2、可以建立指针变量的引用
int i=5;
int *p=&i;
int *&pt=p; //pt是一个指向整型变量的指针变量的引用,初始化为p
3、可以用const对引用加以限定,不允许改变该引用的值,但并不阻止改变引用所代表的变量的值
int i=5;
const int &a=i;
a=3; //错误
i=3; //合法
4、可用常量或表达式对引用进行初始化,但必须用const作声明
int i=5;
const int &a=i+3;
//相当于:
int temp=i+3;
const int &a=temp;
还可用于不同类型的变量对之初始化
double i=3.1415926;
const int &a=i;
//相当于:
int temp=i;
const int &a=temp;