【C/C++】引用&的含义/语法/作为函数参数/函数返回值/本质/常量引用

  1. 含义
    引用不产生副本,只是给原变量起了别名。
    对引用变量的操作就是对原变量的操作。

  2. 基本语法
    数据类型 &别名 = 原名
    e.g.

int a = 10;
int &b = a; //引用必须要初始化,一旦初始化后不可以更改:因为本指是指针常量,不可以修改指针的指向

可以通过赋值修改:

int main()
{
   int a = 10;
   int &b = a;
   int c = 20;
   b = c; //可以赋值,但是不能更改引用
   cout << "a" << a << endl;
   cout << "b" << b << endl;
   system("pause");
}


发现更改了引用b的值之后,a的值也跟着改变了。
对引用变量的操作就是对原变量的操作。

  1. 引用作为函数参数
    作用:传参让形参修饰实参
    优点:简化指针修改实参。
    void test01(&a)

  2. 引用作为函数返回值

#include <iostream>
using namespace std;

//返回局部变量引用
int& test01()
{
   int a = 10; //局部变量存放在 栈区
   return a;
}

//函数调用可以作为左值,调用完后返回a的引用。
//左值必须为可修改的值
int& test02()
{
   static int a = 10; //静态变量,存放在全局区,全局区数据在程序结束后系统释放
   return a;
}

int main()
{
   // 不能返回局部变量的引用
   // int &ref = test01();
   // cout << ref << endl;
   
   int &ref2 = test02();
   cout << ref2 << endl;
   
   test02() = 1000; //如果函数的返回值是引用,这个函数调用可作为左值,因为引用相当于返回了变量,可以被修改
   cout << ref2 << endl;

   system("pause");
}
  1. 引用的本质
    在C++内部实现一个指针常量。
    指针常量:指针的指向不可以修改,指针指向的地址的内存中的值可以修改。
//发现是引用,转换为 int* const ref = &a;
void func(int& ref)
{
      ref = 100; // ref是引用,转换为*ref = 100
}
int main()
{
      int a = 10;

      //自动转换为 int* const ref = &a; 创建引用相当于创建了一个指针常量:指针的**指向固定**
      int& ref = a;

      ref = 20; //内部发现ref是引用,自动转换为:*ref = 20;

      func(a);
}
  1. 常量引用
    作用:修饰形参,防止误操作
#include <iostream>
using namespace std;

//打印数据函数
void showValue (const int& val)
{
//作用2: 防止误操作
   //val = 1000; 报错,不能修改
   cout << val << endl;
}

int main()
{
   //常量引用
   //使用场景:用来修饰形参,防止误操作

//作用1: 直接赋值(常值)
   //加上const之后 编译器将代码修改 int temp = 10; const int &ref = temp;
   //int& ref = 10; 报错,引用必须引一块合法的内存空间
   const int& ref = 10; 
   //ref = 20; 报错,加入const之后变为只读,不可以修改

   int a = 100;
   showValue(a);
   cout << a << endl;

   system("pause");
}
原文地址:https://www.cnblogs.com/kinologic/p/14041281.html