1、变量的引用
作用:给变量取别名
语法:数据类型 &别名=原名;
int main(){
int a=10;//定义a是整型变量,并赋值10
int &b=a;//声明b是a的"引用"
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
//比较两者的值,明确b就是a的别名,与a有同样的效果
return 0;
}
2、引用注意事项
1.声明一个引用时,必须初始化。
2.引用在初始化后,不能改变。
int main(){
int a=101;
int b=502;
//int &c; //错误,引用必须初始化
int &c=a;//一旦初始化,就不能更改
c=b;//这是赋值操作,不是把c作为b的别名
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
system("pause");
return 0;
}
3.不能建立引用数组。
4.不能建立引用的引用,也没有引用的指针。
5.可以取引用的地址。
3、引用作函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参。
优点:可以简化指针修改实参。
//1、值传递
void MySwap01(int a,int b){
int tem=a;
a=b;
b=tem;
}
//2、地址传递
void MySwap02(int* a,int* b){
int tem=*a;
*a=*b;
*b=tem;
}
//3、引用传递
void MySwap03(int &a,int &b){
int tem=a;
a=b;
b=tem;
}
int main(){
int a=101;
int b=502;
//值交换
MySwap01(a,b);//结果a=101,b=502;无作用
a=101,b=502;
Myswap02(&a,&b);//结果是a=502,b=101;有作用
a=101,b=502;
Myswap03(a,b);//结果是a=502,b=101;有作用
return 0;
}
4、引用作函数返回值
作用:引用是可以作为函数的返回值存在
注意:不能返回局部变量引用
用法:函数调用作为左值
int& test01(){
int a=10;//局部变量,出函数后内存就释放了
return a;
}
int& test02(){
static int b=101;//静态变量,存放在全局区,全局区的数据在程序结束后系统释放
return b;
}
int main(){
int &ref1=test01();
int &ref2=test02();
cout<<"ref1="<<ref1<<endl;//第一次结果正确,因为编译器做了保留
cout<<"ref1="<<ref1<<endl;//第一次结果错误,因为a的内存已经释放
cout<<"ref2="<<ref2<<endl;//正确
cout<<"ref2="<<ref2<<endl;//正确
cout<<"ref2="<<ref2<<endl;//正确
return 0;
}
5、引用的本质
本质:引用是一个指针常量,它的指向不能改变,只能指向一个指定的变量。引用的本质就是指针,引用就是用来简化指针的部分功能
6、常量引用
作用:用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改实参
void showval(const int &x)//const限制形参在函数中的值变化
{
x=20;//非法,const修饰,不能改值
cout<<x<<endl;
}
int main(){
int a=10;
showval(a);//打印a的值
return 0;
}