当前位置: 首页 > news >正文

C++——引用

目录

举个例子:

引用的基本特性

引用的定义语法如下:

1. 引用必须初始化:

2. 引用是别名:

3. 引用不能为空:

4. 引用不能重新绑定:

引用的使用场景

函数参数传递:

函数返回值:

引用 vs 指针


在 C++ 中,引用是一个非常重要的特性,它允许我们为变量创建一个别名引用本质上是一个已存在变量的另一个名字,通过引用可以直接操作原始变量,而不需要通过指针的间接访问。引用在函数参数传递、返回值优化等场景中非常有用。

举个例子:

引用是一个变量的别名

  • 别名 的意思是“另一个名字”。

  • 比如,你有一个朋友叫“张三”,他的小名是“小三”。无论是叫“张三”还是“小三”,都是在指同一个人。

  • 在 C++ 中,引用就是给变量起了一个“小名”,通过这个小名可以直接访问原始变量。

int a = 10;      // 定义一个变量 a(原始变量),值为 10
int &ref = a;    // 定义 ref 是 a 的引用(别名,也就是上面提到“小名”)
  • 这里,ref 就是 a 的别名。

  • 无论是操作 a 还是操作 ref,实际上都是在操作同一个变量。

 通过引用可以直接操作原始变量

  • 因为引用是变量的别名,所以通过引用可以直接修改原始变量的值。

  • 不需要通过指针的间接访问,也不需要拷贝数据。

int a = 10;      // 定义一个变量 a,值为 10
int &ref = a;    // 定义 ref 是 a 的引用

ref = 20;        // 通过 ref 修改 a 的值
cout << a;       // 输出 20
  • 在上面的代码中:

    • ref = 20; 这行代码通过引用 ref 修改了变量 a 的值。

    • 最终,a 的值变成了 20

引用和原始变量共享同一块内存

  • 引用和原始变量实际上是同一个东西,只是名字不同。

  • 它们共享同一块内存地址,因此修改引用就是修改原始变量。

int a = 10;      // 定义一个变量 a,值为 10
int &ref = a;    // 定义 ref 是 a 的引用

cout << &a << endl;    // 输出 a 的地址
cout << &ref << endl;  // 输出 ref 的地址(和 a 相同)
  • 在上面的代码中:

    • &a 是变量 a 的地址。

    • &ref 是引用 ref 的地址。

    • 你会发现,&a 和 &ref 的值是相同的,因为它们指向同一块内存。

引用的基本特性

引用的定义语法如下:

数据类型 &引用名 = 变量名;

1. 引用必须初始化

  • 引用在定义时必须初始化,且一旦初始化后,不能再绑定到其他变量。

    int a = 10;
    int &ref = a; // ref 是 a 的引用
  • int &ref:表示 ref 是一个 int 类型的引用。

  • = a:表示 ref 是 a 的别名。

2. 引用是别名

  • 引用和原始变量共享同一块内存地址,修改引用就是修改原始变量。

    int a = 10;
    int &ref = a;
    ref = 20; // 修改 ref 就是修改 a
    cout << a; // 输出 20

3. 引用不能为空

  • 引用必须绑定到一个有效的变量,不能像指针一样指向 nullptr

4. 引用不能重新绑定

  • 引用一旦初始化后,不能再绑定到其他变量。

    int a = 10;
    int b = 20;
    int &ref = a;
    ref = b; // 这是将 b 的值赋给 a,而不是将 ref 重新绑定到 b

引用的使用场景

函数参数传递

  • 引用可以作为函数参数,避免拷贝大对象,同时允许函数修改原始数据。

函数返回值

  • 引用可以作为函数返回值,避免返回值的拷贝。

引用 vs 指针

相关文章:

  • xy轴不等比缩放问题——AUTOCAD c#二次开发
  • Node.js 端口占用错误及解决方案:从 EADDRINUSE 到成功启动服务器
  • gin学习
  • Blender导出fbx到Unity找不到贴图的问题
  • Android笔记之项目引用第三方库(如:Github等)
  • 单片机引脚的电气属性Electrical properties
  • python 学习基本语法整理
  • Vue3+Vite单页面应用(SPA)改造为多页面应用(MPA)
  • PTA 1097-矩阵行平移
  • UNIX网络编程笔记:客户/服务器程序示例
  • git,openpnp - 根据安装程序打包名称找到对应的源码版本
  • 大数据从入门到入魔系列————大数据治理技术栈技术选型
  • AI开源项目
  • 2. 商城前端部署
  • 【学习笔记】卷积网络简介及原理探析
  • AtCoder 第398场初级竞赛 A~E题解
  • Python-docx库详解:轻松实现Word文档自动化生成与图片尺寸控制
  • Java单例模式、懒汉模式、饿汉模式和懒加载
  • Linux任务管理与守护进程
  • Qt的内存管理机制
  • 西安市未央区委书记刘国荣已任西咸新区党工委书记
  • 美国明尼苏达州发生山火,过火面积超80平方公里
  • 福建厦门市副市长、市公安局局长陈育煌出任吉林省公安厅厅长
  • 外国游客“在华扫货”热:“带空箱子到中国!”
  • 从这些电影与影像,看到包容开放的上海
  • 中美瑞士会谈后中国会否取消矿产出口许可要求?外交部回应