04. 引用

1.引用的基本定义与核心特性

2.引用的常见用法

3.引用 vs 指针


1.引用的基本定义与核心特性

c++中引用是变量的"别名",就像一个人有本名和外号,引用和原变量指向同一块内存地址,操作引用就等同于操作原变量1).语法格式// 语法:类型& 引用名 = 原变量名;inta=10;int&ra=a;// ra是变量a的引用(别名)"&是引用标识符, 必须和类型写在一起"
2).核心特性 a.必须初始化 声明引用时,必须绑定到一个已存在的变量,不能"悬空"b.不可改绑 初始化后,引用永远指向最初绑定的变量,无法切换指向 c.引用无独立内存,引用本身不占用额外内存,只是变量的别名;不能引用NULL,必须绑定有效变量,不像指针可以指向NULL

2.引用的常见用法

1).基础用法:操作引用=操作原变量#include <iostream>usingnamespacestd;intmain(){intnum=100;int&ref_num=num;// 定义num的引用// 操作引用,原变量也会变ref_num+=50;cout<<"num = "<<num<<endl;// 输出:num = 150cout<<"ref_num = "<<ref_num<<endl;// 输出:ref_num = 150cout<<"&num = "<<&num<<endl;// 输出num的地址cout<<"&ref_num = "<<&ref_num<<endl;// 输出和num相同的地址return0;}

2).引用作为函数参数 核心优势:避免值传递的拷贝开销(尤其对大对象,如类、数组),同时比指针更简洁、安全(无需解引用*)
#include <iostream>usingnamespacestd;// 1. 值传递:拷贝新变量,修改不影响原变量voidchangeByValue(intx){x=200;}// 2. 指针传递:修改原变量,但需要解引用,语法稍繁琐voidchangeByPointer(int*x){*x=200;}// 3. 引用传递:修改原变量,语法简洁,无拷贝voidchangeByReference(int&x){x=200;}intmain(){inta=100;changeByValue(a);cout<<"值传递后:"<<a<<endl;// 输出:100(无变化)changeByPointer(&a);cout<<"指针传递后:"<<a<<endl;// 输出:200(有变化)a=100;// 重置changeByReference(a);cout<<"引用传递后:"<<a<<endl;// 输出:200(有变化)return0;}

3).常引用(const引用):"只读的别名, 如果不想通过引用修改原变量, 可以用const修饰引用"a.禁止通过常引用修改原变量(原变量本身仍可修改)b.可以绑定常量、临时值(普通引用不行)
#include <iostream>usingnamespacestd;intmain(){inta=100;constint&const_ref=a;// 常引用,只读// const_ref = 200; // 错误!常引用不能修改原变量a=200;// 允许:原变量本身可改,const_ref会同步变化cout<<const_ref<<endl;// 输出:200// 常引用可以绑定临时值(普通引用不行)constint&temp_ref=10+20;cout<<temp_ref<<endl;// 输出:30return0;}

4).引用作为函数返回值 注意:"绝对不能返回局部变量的引用(局部变量在函数结束后销毁, 引用会悬空, 导致未定义行为)"正确用法:返回全局变量、静态变量或类成员的引用(生命周期长的变量)
#include <iostream>usingnamespacestd;// 全局变量(生命周期贯穿程序)intglobal_num=100;// 返回全局变量的引用int&getGlobalNum(){returnglobal_num;}// 错误示例:返回局部变量的引用(禁止!)int&getLocalNum(){intlocal_num=200;returnlocal_num;// 函数结束后local_num销毁,引用悬空}intmain(){// 正确用法:通过返回的引用修改全局变量getGlobalNum()=300;cout<<global_num<<endl;// 输出:300return0;}

3.引用 vs 指针

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

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

相关文章

系统V信号量

信号量 PV操作的名称来源于荷兰语,其中P代表“passeren”(通过),V代表“vrijgeven”(释放),是Dijkstra在设计信号量时所使用的术语。 P操作:表示“通过”,用于请求资源或进入临界区。当进程执行P操作时,信号…

我的十年:从测试员到AI创业者的真实旅程

启程于测试的基石 回首2016年&#xff0c;我作为一名初入行的软件测试员&#xff0c;坐在狭小的工位前&#xff0c;面对着一堆杂乱的测试用例和反复出现的bug报告。那时的测试世界&#xff0c;大多依赖手动执行&#xff1a;我们用Excel记录用例&#xff0c;用JIRA追踪缺陷&…

2026年靠谱的pp管,PP风机,pp风管厂家实力推荐名录 - 品牌鉴赏师

引言在当今环保产业蓬勃发展的时代,PP 管、PP 风机、PP 风管作为工业通风与环保系统中不可或缺的重要组件,其质量与性能直接关系到整个系统的稳定运行与环保效果。为了给广大用户提供一份可靠、客观的厂家实力推荐名…

SSM294的农产品进销存管理vue

目录SSM294农产品进销存管理系统的Vue实现摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM294农产品进销存管理系统的Vue实现摘要 该系统基于SSM&#xff08;SpringSpringMVCMyBatis&#xff09;后端框架与Vue.js前端技…

Java实现——链队列(泛型)

package Data_Structure;import java.util.NoSuchElementException; import java.util.Random;//链队列,附设头结点 public class LinkQueue<T> {//内部结点类private static class Node<T>{T data;Node&…

SSM296的汽车租赁系统vue

目录SSM296汽车租赁系统Vue摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM296汽车租赁系统Vue摘要 SSM296汽车租赁系统是基于SpringSpringMVCMyBatis&#xff08;SSM&#xff09;后端框架与Vue.js前端框架开发的现代化…

2026年上海二手房装修公司推荐,一站式服务与拎包入住交付能力横评 - 品牌鉴赏师

引言在上海二手房装修市场蓬勃发展的当下,消费者面临着众多装修公司的选择。为了给消费者提供全面、客观、公正的参考,我们依据相关的行业标准和市场数据,制定了这份上海二手房装修公司推荐榜单,并推出相应的选择指…

基于微信小程序的医院体检预约管理系统的设计和实现

前言 &#x1f31e;博主介绍&#xff1a;✌CSDN特邀作者、全栈领域优质创作者、10年IT从业经验、码云/掘金/知乎/B站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发、文档编写、答疑辅导等。✌…

JavaScript 数组合并性能优化:扩展运算符 vs concat vs 循环 push

在日常开发中&#xff0c;我们经常需要合并数组&#xff0c;比如批量导入数据、分页加载列表、处理大量日志等场景。当数组规模较小时&#xff0c;用什么方法都差不多&#xff1b;但当数组达到成千上万条时&#xff0c;选择不当的方法可能会导致栈溢出或内存飙升。 今天我们就…

SSM291的母婴用品商城网站

目录SSM291母婴用品商城网站摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM291母婴用品商城网站摘要 SSM291母婴用品商城网站是一个基于SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架开发的电子商务平台&…

python项目打包为镜像

1.生成 requirements.txt 在项目根目录下,使用 pipreqs生成依赖文件,确保镜像构建时安装正确的包 pip install pipreqs pipreqs . --encoding=utf8 --force 2.编写 Dockerfile # 使用官方 Python 轻量级镜像 FROM python:3.11-slim# 设置容器内工作目录 WORKDIR /app# 复制…

救命神器9个AI论文软件,专科生搞定毕业论文+格式规范!

救命神器9个AI论文软件&#xff0c;专科生搞定毕业论文格式规范&#xff01; 专科生的毕业论文救星&#xff0c;AI工具如何帮你轻松过关&#xff1f; 对于许多专科生来说&#xff0c;毕业论文不仅是学术能力的考验&#xff0c;更是时间与精力的巨大挑战。尤其是在面对格式规范、…

知光项目对象存储模块

前言&#xff1a; 该文档只作为本人学习过程的记录&#xff0c;若还需要更详细的项目文档可以点击下方链接进行购买 文档地址 同时该项目已经在git上面开源&#xff0c;可以在购买前去看一下该项目。 项目后端的git地址&#xff1a;知光git后端地址 项目前端的git地址: 知…

【路径规划】基于RRT、RRT星、RRTX、A_和D_ Lite实现机器人路径规划附matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知。&#x1f525; 内容介绍机器人路径规划是自主移动机器人&…

fastapi里面tortoise-orm的用法

1.文档地址 https://blog.csdn.net/weixin_53909748/article/details/131747197 2.创建实体类,model/models.py from tortoise.models import Model from tortoise import fieldsclass Teacher(Model):id = fields.IntField(pk=True)name = fields.CharField(max_length=25…

【无人机三维路径规划】基于蚁群算法ACO、蜣螂算法DBO、人工蜂鸟算法AHA复杂山地模型下无人机路径规划附Matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知。&#x1f525; 内容介绍一、技术背景与核心目标无人机三维路…

【初阶数据结构】解锁顺序表潜能:一站式实现高效通讯录系统

&#x1f525;小龙报&#xff1a;个人主页 &#x1f3ac;作者简介&#xff1a;C研发&#xff0c;嵌入式&#xff0c;机器人等方向学习者 ❄️个人专栏&#xff1a;《C语言》《【初阶】数据结构与算法》 ✨ 永远相信美好的事情即将发生 文章目录前言一、通讯录框架Test.c二、通讯…

大数据领域数据服务的用户需求挖掘方法

大数据领域数据服务的用户需求挖掘&#xff1a;从“拍脑袋”到“系统性解题” 在大数据行业摸爬滚打5年&#xff0c;我见过太多“叫好不叫座”的数据服务&#xff1a; 花费3个月开发的“实时销售看板”&#xff0c;上线后运营人员说“不如Excel好用”&#xff1b;投入百万搭建的…

西门子S7 200smart与欧姆龙E5cc温控器通讯实战

西门子S7 200smart与欧姆龙E5cc温控器通讯程序 功能&#xff1a;通过西门子s7 200smart与欧姆龙e5cc温控器modbus通讯&#xff0c;实现目标温度设定&#xff0c;实际温度读取&#xff0c;设定报警类型&#xff0c;报警值&#xff0c;报警值上下限&#xff0c;探头型号设定等功能…

【AIGC】2025年12月13日 AutoMV: Automatic Multi-Agent System for Music Video Generation 2:论文

【AIGC】2025年12月13日 AutoMV: Automatic Multi-Agent System for Music Video Generation 1:介绍 代码 GitHub: https://github.com/multimodal-art-projection/AutoMV Website: https://m-a-p.ai/AutoMV/ Abstract 摘要 Music-to-Video (M2V) generation for full-lengt…