2.1引用的基本使用
作用:引用
语法:数据类型 &别名 = 原名
例:
int a=10;
int &b =a;
则如果输出b则b=10.如果修改b则同时修改a。
2.2引用注意事项
1、引用必须初始化,int &b=a;这个就是初始化。不能int &b;
2、引用初始化后,引用别名就不能更改。例子:
int a=10;int c=20;
int &b=a; //引用a之后就不能引用c否则报错
int &b=c;//此时就会报错。因为之前已经引用a了,初始化后再次引用不对。
2.3引用做函数参数
作用:函数传参时,可以用利用引用技术使形参修饰实参,比指针更简单
优点:可以简化指针修饰实参
//值传递:形参不能改变实参
void mySwap01(int a,int b)
{
int temp =a;
a=b;
b=temp;
}
//地址传递;指针形式。形参可以修改实参
void mySewap02(int *a,int *b)
{
int temp =*a;
*a=*b;
*b=temp;
}
//引用传递;形参也可以修饰实参。除指针外的修饰方式
void mySwap03(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
2.4引用座位函数的返回值
作用:引用可以作为函数的返回值存在的
注意:最好不要返回形参,因为形参存放在栈区第一次调用后会被释放掉,第二次会成乱码。一般调用全区变量或者,static修饰的形参的全局变量。
// 正确调用方法
int& test()
{
static int a=10;
return a;
}
int main()
{
int& ref=test(); //正确;ref是test的别名
//引用的函数返回值形式还可以做左值;
test()=100;//输入后全局变量a=test()=ref=100;
}
2.5引用的本质
本质:引用的本质是在c++内部实现一个指针常量
讲解:
//如果计算机发现引用,编译器自动转化为 int* const ref=&a;
void func(int& ref)
{
ref = 100; //ref是引用,自动转化为*ref=100;
}
int main()
{
int a=10;
int& ref=a; //自动转化int* const ref=&a
ref=100; //自动转化为*ref=100
func(a);
return 0;
}
2.6常值引用
作用:一般解决型参数误操作引用
则一般在引用前面加上const int &ref;则不会再修改别名的参数。
//例子。创建一个子函数
void func(const int &ref)
{
//ref =100;这是语法错误,会出现佐治不能修改的报错。这样可以达到误操作的方式
cout<<"打印="<<ref<,endl;
}