1. 引用:给变量起别名,修改其中一个,另一个也会被修改
语法:数据类型 &别名 = 原名
int a = 1;
int &b = a;
b = 20;
cout<<a<<endl; // a 也是20
注意: 1. 引用必须要初始化
Int &b; // 错误的
2. 引用一旦初始化后就不可以更改
int &b = a;
b = c; // 错误
2. 引用作为函数参数
作用:函数传参的时候,可以利用引用,使形参修饰实参
// 值传递
void mySwap01(int a, int b)
{
int tmp = a;
a = b;
B = tmp;
}
// 地址传递
void mySwap02(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
// 引用传递
void mySwap03(int &a, int &b)
{
int tmp = a;
a = b;
B = tmp;
}
通过引用传递产生的效果和地址传递是一样的。操作形参会修改实参。 引用语法更简单。
3. 引用作为函数的返回值:
3.1 函数不要返回局部变量的引用
int& test01()
{
int a = 10;
return a;
}
int & ref = test01();
cout << ref << endl;
cout << ref << endl;//错误:打印野值
3.2 如果函数的返回值是引用,则函数的调用可以作为左值,可以被赋值
int& test01()
{
static int a = 10;
return a;
}
int & ref = test01();
cout << ref << endl;
cout << ref << endl;//正确
test01() = 1000;//函数调用作为左值
4. 引用的本质:C++内部实现是指针常量
int & ref = a; // 自动转换成 int* const ref = &a;
// 指针常量是指针指向不可改,也说明为什么引用不可更改
ref = 20; // 内部发现ref是引用,自动帮我们转换为 *ref = 20;
5. 常量引用: 用来修饰形参,防止误操作
void showValue(const int & v){
v = 10; // 错误
return;
}