P8 C++引用

前言 本期我们要讲的是 C++ 中的引用

上期我们讨论了指针,如果你没有看过那期内容,你一定要回去看看,因为引用实际上只是指针的扩展,你至少需要在基本层面上理解指针是如何工作的,然后才能继续学习本期的内容,本期内容是指针那一期的链接。

P7 C++指针-CSDN博客

先了解这些

指针 和 引用 是被大量翻来覆去提及的两个关键字,在 C++ 语言和其他语言中,它们本质上是一样的。

没错,指针和引用在计算机中做的事情几乎是一样的,从语义上说,我们如何使用和书写它们,有一些细微的区别,但从根本上来讲,引用只是指针的伪装,它们只是在指针的语法糖,它可以让程序更容易阅读,更容易被理解。

01 如何使用引用 

看下面这段代码

#include <iostream>int main()
{int data = 9;int& XiaoMing = data;   //引用,给data取个小名为XiaoMingstd::cout<<XiaoMing << std::endl;std::cout<<data << std::endl;std::cin.get();return 0;
}

我有一个变量,记作 a,我让它等于 9,它是一个整数,我给这个变量创建一个引用,我可以输入变量的类型,后面跟着 & 符号,注意 & 符号实际上是变量声明的一部分。

如果你看过指针那一期,你会知道我们可以使用 & 符号获取现有变量的内存地址,这里不一样,因为 & 符号实际 不在类型旁边,它只是类型的一部分,要注意区别,因为很多人只要看到 &,就认为都是引用,或者都是取地址,其实具体是啥取决于上下文,在当前例子中,因为它在类型的旁边,所以它是一个引用。

我们继续解释代码,我将基命名为 XiaoMing, 并将其值设为 a,然后这里就不需要其他奇怪的运算符了,我们只是让它等于一个现有的变量就可以了。

我们现在创造了一个叫做 别名 的东西,因为这个 XiaoMing“变量” ,——我说的 “变量” 是带引号的,因为它不是一个真正的变量,这只是一个引用,ref 变量实际上不存在,它只存在于我们的源代码中。如果你现在编译这段代码,你不会得到两个变量 a 和 XiaoMing,你只会得到 a。

我们现在能做的是,我们可以使用 XiaoMing就像它就是 a,如果我们设 XiaoMing等于 10,然后打印 a,你会发现 a 的值变为了10。

因为 XiaoMing就是 a,我们只是给 a 起了个小名,在这种情况下,我们的引用不是一个指针或其他类似的东西,编译器不需要实际创建一个新变量,如果你编译代码,这代码就相当于你设置了 a = 10,我们就是这么做的,因为如果给变量起一个别名的话,某些情况下我们的代码逻辑会更简单一些。

02 引用的作用示例

我们定义一个函数 addNumber,让整型变量相加。你觉的下面的写法会实现这个功能吗?

#include <iostream>void addNumber(int number1, int number2, int padd)    
{padd = number1+number2;      //相加
}int main()
{int add = 5;addNumber(1, 5, add);std::cout<<add << std::endl;   //打印出两数相加后的值std::cin.get();return 0;
}

并不能。

我们调用 addNumber函数,将 add 作为参数传递进去,你可以看到我们井没有把它作为一个指针或者引用等类似的东西传进去,它会拷贝这个值 5 复制到函数中,复制会创建一个全新的变量 padd,这就是程序中发生的事情,如果运行代码我们可以看到打印出的值还是5 。

我们需要做的是通过引用来传递变量,这样它才会递增,因为我真正想做的是影响这个变量,那么我们该怎么做呢,如何通过将这个变量传递到函数中来修改它呢?

上期我们讨论了指针,还记得指针就是我们的内存地址吧,从理论上讲,我们可以做的是,可以没有将实际值 5 传递给函数,但是可以把 a 变量的内存地址传递进去,因为我们可以在这个函数中做的是可以查找那个内存地址,然后修改那个内存地址中的值。因为我们已经将该内存地址传递给了函数, 所以我们理论上是可以这样做的,但是使用引用会更简单些。

事实上,我们只要在addNumber的padd参数修改一下,将padd变为add的小名即可

这就是我想说的关于引用的内容了,非常简单的东西

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/214685.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「Whale 帷幄」连续入选科技榜单,AGI 冲击波正在加速行业洗牌

以 AGI 为底座&#xff0c;品牌 MarTech 正在经历一场前所未有的深度变革。 近日&#xff0c;弯弓研究院发布「中国 MarTech 500 强榜单」&#xff0c;以 2023 中国营销技术&#xff08;MarTech&#xff09;生态为研究对象&#xff0c;洞察行业现象与未来趋势。作为品牌数字化…

Coded Block Pattern

Coded Block Pattern简称CBP,在H264协议7.3.2.1中有介绍,CBP表征了MB中的亮度和色度块的残差做DCT后的系数是否为0的情况,CBP可以拆分为CodedBlockLuma和CodedBlockChroma,分别对应亮度和色度块的残差系数是否为0,它们的具体含义后面会做介绍,首先我们要获取CodedBlockLu…

element ui 上传组件实现手动上传

首先需要给上传组件增加http-request属性&#xff0c;这个方法中可以获取到文件&#xff0c;并按照自己的方式进行上传。 <el-uploadreffileUploadaction#:http-requesthttpRequest:on-preview"handlePreview":on-remove"handleRemove":limit"1&q…

【数据分享】2023年我国省市县三级的瞪羚企业数量(免费获取/Excel/Shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平&#xff01;比如一个城市的金融企业较多&#xff0c;那这个城市的金融产业肯定比较发达&#xff1b;一个城市的制造业企业较多&#xff0c;那这个城市的制造业肯定比较发达。 之前我们给大家分享了…

标题导航点击导航滑动到指定位置滑动到指定位置选中对应导航vue3

菜单导航栏点击导航滑动到指定位置&滑动到指定位置选中对应导航 效果 实现 话不多说直接上代码&#xff0c;有用素质三连(点赞、评论、加关注) import { defineComponent, onBeforeUnmount, onMounted, reactive, ref } from "vue"; import { map } from &quo…

加入华为云鲲鹏极简开发创造营,激活创造力,探索无限可能!

数字经济时代&#xff0c;速度、效率、质量安全已成为各行业告诉拓新发展的关键&#xff0c;华为云不断打磨敏捷安全开发的软件平台&#xff0c;为更高效率的生产力变革积蓄能量。 在刚刚过去不久的2023华为全联接大会上&#xff0c;华为最新发布了华为云CodeArts与鲲鹏DevKit…

java操作富文本插入到word模板

最近项目有个需求&#xff0c;大致流程是前端保存富文本&#xff08;html的代码&#xff09;到数据库&#xff0c;后台需要将富文本代码转成带格式的文字&#xff0c;插入到word模板里&#xff0c;然后将word转成pdf&#xff0c;再由前端调用接口下载pdf文件&#xff01; 1、思…

深入理解数据结构:链表

文章目录 &#x1f330;导语&#x1f330;链表的定义及基本结构&#x1f330;单链表&#x1f955;单链表特点 &#x1f330;双向链表&#x1f955;双链表特点 &#x1f330;循环链表&#x1f955;循环链表特点 &#x1f330;链表的操作&#x1f346;链表的插入&#x1fad8;链头…

【洛谷 P1636】Einstein学画画 题解(图论+欧拉通路)

Einstein学画画 题目描述 Einstein 学起了画画。 此人比较懒~~&#xff0c;他希望用最少的笔画画出一张画…… 给定一个无向图&#xff0c;包含 n n n 个顶点&#xff08;编号 1 ∼ n 1 \sim n 1∼n&#xff09;&#xff0c; m m m 条边&#xff0c;求最少用多少笔可以画…

贵金属交易指南:如何在市场中获利?

贵金属市场一直以来都是投资者追逐利润的热门选择&#xff0c;然而&#xff0c;贵金属市场波动较大&#xff0c;在市场中获利并非易事。想要成功&#xff0c;需要理解市场动态和采取适当的策略。万洲金业将为您提供一些实用的贵金属交易指南&#xff0c;帮助您在市场中获利。 …

基于element自动表格

需求是根据JSON文件生成表格&#xff0c;包含配置和自动props属性以及过滤器&#xff1b; 数据示例&#xff1a; 表格设置&#xff1a; /*** 表格表头信息* chineseToPinYin: 这是封装的根据中文汉字转换为拼音的方法* prop: 表头字段名* filter: 数据过滤器* label: 表头显示…

基于Vue+SpringBoot的校园疫情防控管理系统

项目编号&#xff1a; S 037 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S037&#xff0c;文末获取源码。} 项目编号&#xff1a;S037&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、…