C++——引用

打印 上一主题 下一主题

主题 1073|帖子 1073|积分 3219

目录
举个例子:
引用的基本特性
引用的定义语法如下:
1. 引用必须初始化:
2. 引用是别名:
3. 引用不能为空:
4. 引用不能重新绑定:
引用的使用场景
函数参数转达:
函数返回值:
引用 vs 指针


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

引用是一个变量的别名


  • 别名 的意思是“另一个名字”。
  • 好比,你有一个朋侪叫“张三”,他的小名是“小三”。无论是叫“张三”还是“小三”,都是在指同一个人。
  • 在 C++ 中,引用就是给变量起了一个“小名”,通过这个小名可以直接访问原始变量。
  1. int a = 10;      // 定义一个变量 a(原始变量),值为 10
  2. int &ref = a;    // 定义 ref 是 a 的引用(别名,也就是上面提到“小名”)
复制代码


  • 这里,ref 就是 a 的别名。
  • 无论是操作 a 还是操作 ref,实际上都是在操作同一个变量。
 通过引用可以直接操作原始变量


  • 因为引用是变量的别名,所以通过引用可以直接修改原始变量的值。
  • 不需要通过指针的间接访问,也不需要拷贝数据。
  1. int a = 10;      // 定义一个变量 a,值为 10
  2. int &ref = a;    // 定义 ref 是 a 的引用
  3. ref = 20;        // 通过 ref 修改 a 的值
  4. cout << a;       // 输出 20
复制代码


  • 在上面的代码中:

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

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


  • 引用和原始变量实际上是同一个东西,只是名字差别。
  • 它们共享同一块内存所在,因此修改引用就是修改原始变量。
  1. int a = 10;      // 定义一个变量 a,值为 10
  2. int &ref = a;    // 定义 ref 是 a 的引用
  3. cout << &a << endl;    // 输出 a 的地址
  4. cout << &ref << endl;  // 输出 ref 的地址(和 a 相同)
复制代码


  • 在上面的代码中:

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

引用的基本特性

引用的定义语法如下:

  1. 数据类型 &引用名 = 变量名;
复制代码
1. 引用必须初始化



  • 引用在定义时必须初始化,且一旦初始化后,不能再绑定到其他变量。
    1. int a = 10;
    2. int &ref = a; // ref 是 a 的引用
    复制代码


  • int &ref:表示 ref 是一个 int 范例的引用。
  • = a:表示 ref 是 a 的别名。
2. 引用是别名



  • 引用和原始变量共享同一块内存所在,修改引用就是修改原始变量。
    1. int a = 10;
    2. int &ref = a;
    3. ref = 20; // 修改 ref 就是修改 a
    4. cout << a; // 输出 20
    复制代码
3. 引用不能为空



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



  • 引用一旦初始化后,不能再绑定到其他变量。
    1. int a = 10;
    2. int b = 20;
    3. int &ref = a;
    4. ref = b; // 这是将 b 的值赋给 a,而不是将 ref 重新绑定到 b
    复制代码
引用的使用场景

函数参数转达



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

函数返回值



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

setMaxData函数:


  • 接收两个整数的引用作为参数
  • 比较这两个整数
  • 返回较大的谁人整数的引用(不是值,而是引用自己)
main 函数


  • 定义两个整数变量 a (10) 和 b (20)
  • 调用 setMaxData(a, b),这会返回 b 的引用(因为20 > 10)
  • 将100赋值给这个返回的引用,实际上就是给 b 赋值
  • 输出结果:a 仍然是10,b 如今是100
引用 vs 指针



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表