C++ 引用

145 阅读1分钟

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;
}