【c++初阶】:引用

news2024/11/19 13:29:08

c++入门

  • 一.概念
  • 二.使用
  • 三.应用
  • 四.常引用
  • 五.引用与指针

一.概念

在这里插入图片描述

c语言中我们常用指针找地址,但在c++中,忽略了指针(当然也可以使用指针)。常用引用这个概念。

二.使用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到这里的b和c本质上都是a,只是不同的称呼罢了。

一个问题,下面这段代码是将x赋值给了b,还是b变成了x的别名呢?

在这里插入图片描述

在这里插入图片描述

答案是x赋值给了b,这也是c++与java在引用上最大的区别。c++的引用是不可更改的。

总结:1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体

三.应用

作参数

那么引用在实际工程里有什么作用呢?我们可以看一个经典的函数。

在这里插入图片描述

在这里插入图片描述

在c语言中我们必须传地址才能实现交换,在c++中直接引用毫无疑问方便多了。

引用作返回值

在这里插入图片描述

在函数建立栈帧并开始返回时会创建一个临时变量来存储返回值,之后再将其带回(如果数据较小,通常是寄存器,如果对函数栈帧不了解可以看看这篇博客函数栈帧),而我们可以直接通过返回引用,这样的话编译器就不会产生临时变量从而极大的提高我们的效率。

注意,引用跟指针类似,这里是因为n加了static储存在静态区,才不会随着函数栈帧的销毁而被销毁,才能直接通过引用(地址)来返回n。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四.常引用

在引用过程中,权限不能被放大但可以平移或者缩写,例如:原来的量不能被改变,那么你的引用也不能被改变。

在这里插入图片描述

在这里插入图片描述

这也是一个权限被放大的问题,返回的整形是一个临时变量,而临时变量具有常引性(常数性)不能被修改,所以ret在这权限被放大了。要如下写:

在这里插入图片描述

此时的ret也不可被修改,实现了权限的平移。同理下面也是一样的道理。

在这里插入图片描述

从double转换到int会进行隐式类型转换,会创建一个临时变量,而临时变量具有常引性不可被修改,所以这里的yy也是权限被放大了,可以如下改:

在这里插入图片描述

五.引用与指针

联系

引用在语法层面上只是一个量的别名,不开空间但实际上在底层汇编语法上看引用是类似与指针的方式实现的。

在这里插入图片描述

在这里插入图片描述

区别

在这里插入图片描述

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

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

相关文章

【NestJs】数据库重构

上一篇文章详细了介绍nestjs 配置数据库,有不懂的小伙伴可以先查看上一篇文章【NestJs】使用连接mysql企业级开发规范在继续往下。 今天这一篇文章主要是针对配置数据库的重构,使用代码规范,方便后期维护。 当应用变得复杂 我们需要借用TypeO…

webstorm常用快捷键

webstorm作为前端代码JavaScript开发的利器,真的特别好用,我就总结一下我工作中经常用到的快捷键,有些快捷键是我自定义配置的,是以mac电脑来总结这篇文章的,请知晓: 自定义配置快捷键: 常用快…

SpringCloud源码探析(五)-网关Gateway的使用

1.概述 在微服务架构中,网关提供了统一的对外访问入口(自身跨一个或多个服务),它保证了内部服务对外暴露的合理性与安全性、降低了服务之间访问的复杂性,是微服务架构中至关重要的一部分。在SpringCloud中网关主要包含…

让观众近距离感受如然之光 lipro智能家居成上海车展亮点之一

近段时间,上海国际车展如火如荼地举行,吸引了众多汽车厂商及相关企业参展。在本次展会上,星纪魅族集团也携手亿咖通科技,以联合参展的形式登陆「上海国际车展」 6.1号馆,共同展示智能汽车解决方案及产品创新。此外&…

第十四届蓝桥杯研究生组2023年省赛题解--全部采用Java语言实现

引言 今天现在这里 挖个坑,太忙了,这个专题不一样有时间补完,但我会尽力而为的。记录一下今天的日子:2023/04/21 看看这个坑要什么时候自己才能补完。 题目pdf下载:第十四届蓝桥杯研究生组pdf下载 在此特别感谢博主…

flac转换成mp3,4种方法教会你

怎么把flac转换成mp3?由于互联网技术的不断提升,我们每天接触到的各种音频格式变得越来越多样化。然而,有些特殊格式的音频会在处理时带来一定困难,因为它们的兼容性较差,不能在常用播放器上正常播放,这就给…

React面试题

React 如何创建一个react的项目(使用脚手架) 安装cr脚手架:npm install -g create-react-app进入文件夹:create-react-app 项目名称进入项目:cd 项目名称运行项目:npm start 如何不使用脚手架创建一个项…

maven打包学习

这篇文章不错: 思考:打包的时候是按照当前项目为标准打包的,那么所有的冲突都会以当前pom为根pom打包。那么,如果jar冲突,会用当前pom的依赖jar。 根据这个文章做了个有趣的实验: object3 //install 2个…

深度强化学习——第一次知识小结(3.5)

一、策略网络的小结: 重要概念回顾: 1、动作价值函数QΠ(st,at) 动作价值函数是未来奖励总和Ut的条件期望,如果已知了策略函数Π与当前的状态st,QΠ就可以对所有的动作a打分,以此来决定选择哪个a 其实顾名思义就是…

2023第14届蓝桥杯C/C++A组省赛题解

省一了,占个坑,今天晚上来补蓝桥的题 试题 A: 幸运数 本题总分:5 分 【问题描述】 小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面 一半的数位之和,则这个数是他的幸运数字。例如 2314 是…

ROC的理解

ROC 的由来 ROC 曲线是由混淆矩阵衍生来的指标。 混淆矩阵如图所示, 二ROC曲线的横坐标为 FPR,纵坐标为 TPR,计算公式分别是 F P R F P F P T N , 也就是 F P R F P F A L S E FPR \frac{FP}{FPTN}, 也就是 FPR \frac{FP}{FALSE} FP…

5天学会Linux C高级

day1 用C语言的理论知识点去推断结果 需求&#xff1a;让面试官知道你懂这个内容 一、C语言补充内容 【1】结构体补充内容&#xff1a; 1&#xff09;结构体.等法 结构体.等法代码 #include <stdio.h> struct student { int num; float score; char name[32…

docker镜像创建|实战案例(ssh|systemd|nginx|apache)

docker镜像创建|实战案例&#xff08;ssh|systemd|nginx|apache&#xff09; 一 Docker 镜像的创建1.基于现有镜像创建2基于本地模板创建3 基于Dockerfile 创建为什么Docker里的centos的大小才200M&#xff1f;DockerfileDocker 镜像结构的分层 4 Dockerfile 案例&#xff08;h…

Java IO数据流

Java IO数据流介绍 在程序开发中&#xff0c;将不同输入/输出设备&#xff08;例如文件、网络、压缩包等&#xff09;之间的数据传输抽象为流。可以将流分为字节流&#xff08;以Stream结尾的流&#xff09;和字符流&#xff08;以Reader和Writer结尾的流&#xff09;两种 try…

水羊转债,超达转债,晓鸣转债上市价格预测

水羊转债 基本信息 转债名称&#xff1a;水羊转债&#xff0c;评级&#xff1a;A&#xff0c;发行规模&#xff1a;6.94987亿元。 正股名称&#xff1a;水羊股份&#xff0c;今日收盘价&#xff1a;13.94元&#xff0c;转股价格&#xff1a;13.71元。 当前转股价值 转债面值 /…

5.3 Mybatis映射文件 - 零基础入门,轻松学会查询的select标签和resultMap标签

本文目录 前言一、创建XML映射文件二、MybatisX插件安装三、mapper标签四、select标签UserMapper接口方法UserMapper.xml 五、resultMap标签定义resultMap标签修改select标签 总结 前言 MyBatis的强大在于它的语句映射&#xff0c;它提供了注解和XML映射文件两种开发方式&…

jenkins——邮件告警

文章目录 一、下载 Email Extension 插件二、修改系统配置项目1、Jenkins Location配置2、邮件通知配置&#xff08;用于测试连通性&#xff09;3、Extended E-mail Notification配置4、Jenkins Location 配置5、在 job 中配置邮件发送6、高级设置7、配置发送 trigger8、构建验…

arduino学习笔记3

一.RGB三色小灯实验 1.源代码 int rgb_R11;//接到板子上面的PWM口11 R int rgb_G9;//接到板子上面的PWM口9 G int rgb_B10;//接到板子上面的PWM口10 B void setup() {pinMode(rgb_R,OUTPUT);//设置rgb_R的控制口为输出模式pinMode(rgb_G,OUTPUT);//设置rgb_G的控制口为输出模…

多线程【进阶版】

目录 一. 常见的锁策略 1.1 乐观锁和悲观锁 1.2 轻量级锁和重量级锁 1.3 自旋锁和挂起等待锁 1.4 互斥锁和读写锁 1.5 可重入锁和不可重入锁 1.6 公平锁和非公平锁 1.7 关于锁策略的相关面试题 二. CAS 三. Synchronized 原理 3.1 基本特点 3.2 加锁步骤 3.3 锁消除…

利用宏简化Q_PROPERTY动态属性的定义

目录 写在前面实现历程传统定义方式预想的方式(事实上有一点点区别) 例程mainwindow.hmainwindow.cppmain.cpp 执行结果如上事实的使用方法 写在前面 上一篇写了pyqt如何更加便利地定义动态属性&#xff0c;关于C版的其实在我刚接触Qt不久就想过并做了一些尝试&#xff0c;但死…