C++编程(二)引用

news2024/10/7 18:31:11

文章目录

  • 一、C++中的引用
    • (一)引用
      • 1. 语法格式
      • 2. 作用
      • 3. 注意事项
    • (二)常引用
      • 2. 其他场景
    • (三)引用和函数结合使用
      • 1. 引用可以作为函数的参数
      • 2. 引用可以作为函数的返回值
    • (四)引用和指针的区别
  • 二、C++中的动态内存分配
    • (一)
    • (二)malloc/free和new/delete
    • (三)使用示例

一、C++中的引用

引用是对引用目标起别名,类似于Linux中的硬链接;

(一)引用

1. 语法格式

数据类型 &引用名 = 引用目标;
eg: int &a1 = a;

  • 注:
  • &是一个引用的标识;
  • &在引用中使用表示的是引用的一个标识;
    在两个操作数之间使用表示按位与(a & b);
    在其他场合下表示取地址(&a)

2. 作用

节省内存开销:在给函数传递参数时,形参需要额外的开辟空间,但是使用引用后就可以节省形参的空间

不使用引用

 int func(int a,int b){
 	cout << "a="<<a<<" b="<<b<<endl;
 	cout << "&a="<<&a<<" &b="<<b<<endl;
 	return a+b;
 }
 int main(){
 	int a = 5,b=10;
 	cout << "a="<<a<<" b="<<b<<endl;
 	cout << "&a="<<&a<<" &b="<<b<<endl;
 	cout << "--------------------"<<endl;
 	func(a,b);
 }

从下面运行结果可知,形参会分配新的内存空间
在这里插入图片描述
使用引用

 int func(int &a,int &b){
	cout << "a="<<a<<" b="<<b<<endl;
 	cout << "&a="<<&a<<" &b="<<b<<endl;
 	return a+b;
 }
 int main(){
 	int a = 5,b=10;
 	cout << "a="<<a<<" b="<<b<<endl;
 	cout << "&a="<<&a<<" &b="<<b<<endl;
 	cout << "--------------------"<<endl;
 	func(a,b);
 }

从下面结果可知,使用引用后,并未给形参分配新的内存空间
在这里插入图片描述

3. 注意事项

  1. 引用在定义时必须要有引用的目标
  2. 引用的数据类型 和 引用的目标的数据类型 必须保持一致
  3. 引用目标一旦绑定不可修改
int a = 5;
int &a1 = a;
int b = 10;
a1 = b;//这种写法是简单的赋值操作,而非修改绑定目标

(二)常引用

用const修饰的引用是一个常引用,以下两种使用均可以
const 数据类型 &引用名 = 引用目标;
数据类型 const &引用名 = 引用目标;

常引用不能通过引用来修改引用目标的值,可以通过引用目标自身进行修改。

int a=111;
int &a1=a;
a1=222;//此时就会报错

在这里插入图片描述

  • 注:以下写法是错误的:
    数据类型 &const 引用名 = 引用目标;
    因为引用一旦绑定,后续无法修改。

2. 其他场景

  1. 普通引用不能修饰常量,只有常引用可以修饰常量;
int &a=100; //报错
const int &b=100;

在这里插入图片描述

  1. 普通引用不能修饰临时值,常引用可以修饰临时值
int x=10;
int &a = 5+x;
const int &b=5+x;

在这里插入图片描述

(三)引用和函数结合使用

1. 引用可以作为函数的参数

两个数交换位置,传值、传地址、传引用的区别

#include <iostream>
using namespace std;
int swap1(int a,int b){
   int temp=a;
   a=b;
   b=temp;
}
int swap2(int *a,int *b){
    int temp=*a;
    *a=*b;
    *b=temp;
}
int swap3(int &a,int &b){
    int temp=a;
    a=b;
    b=temp;
}
int main(){
    int a=100,b=200;
    swap1(a,b);//传值
    cout<<"a="<<a<<" b="<<b<<endl;
    swap2(&a,&b);//传地址
    cout<<"a="<<a<<" b="<<b<<endl;
    swap3(a,b);//传引用
    cout<<"a="<<a<<" b="<<b<<endl;
}

在实际开发中,采用哪种方法根据实际需求决定

2. 引用可以作为函数的返回值

格式:

数据类型& 函数名(形参表){
	函数体;
}
  • 注:
  • 引用不可返回局部变量;可以返回全局变量或者使用static修饰的变量
  • 常见的函数返回值是一个右值,引用作为返回值是一个左值。

(四)引用和指针的区别

二、C++中的动态内存分配

(一)

C++仍然支持malloc/free操作,但是一般在C++中使用new/delete

(二)malloc/free和new/delete

(三)使用示例

要求:从堆区申请一块连续空间,在终端上输入学生成绩,并求出成绩的最高分和最低分,以及成绩之和

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

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

相关文章

用final和loombok来实现依赖注入

在Java中&#xff0c;RequiredArgsConstructor 是一个由 Lombok 库提供的注解&#xff0c;它能够自动为类生成一个构造函数&#xff0c;该构造函数包含所有被标记为 final 或者非 final 但在类中没有默认值的字段。这个注解特别适用于当你需要一个构造函数来初始化所有字段&…

Android 14 权限等级剖析

Android 14 权限等级剖析 Android 14 引入了新的权限等级&#xff0c;为应用程序访问敏感信息和功能提供了更细粒度的控制。了解这些新的权限等级及其应用场景对于开发人员至关重要。 1. 概述 Android 一直以来都使用权限机制来控制应用程序对系统资源和用户数据的访问。随着…

第三十篇——等价性:如何从等价信息里找答案?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 知道了等价性的逻辑&#xff0c;通过等价性去衡量事物&#xff0c;像是给…

如何验证Rust中的字符串变量在超出作用域时自动释放内存?

讲动人的故事,写懂人的代码 在公司内部的Rust培训课上,讲师贾克强比较了 Rust、Java 和 C++ 三种编程语言在变量越过作用域时自动释放堆内存的不同特性。 Rust 通过所有权系统和借用检查,实现了内存安全和自动管理,从而避免了大部分内存泄漏。Rust 自动管理标准库中数据类…

Vue3学习笔记<->开发环境安装

背景 公司开始做产品开发&#xff0c;前端就选择使用了vue&#xff0c;替换了传统的jsp。公司要求每个开发人员都要前后端都可以开发&#xff0c;于是就开始学习vue了。 安装环境 安装node.js node.js下载地址&#xff1a;node.js下载地址 安装&#xff1a;选在安装路径&…

晶方科技:台积电吃饱,封装迎春?

半导体产业链掀起涨价潮&#xff0c;先进封装迎接利好。 这里我们来聊国内先进封装企业——晶方科技。 近期&#xff0c;由于产能供不应求&#xff0c;台积电决定上调先进封装产品价格&#xff0c;还表示订单已经排到2026年。 大哥吃不下了&#xff0c;剩下的订单全都是空间。…

【golang学习之旅】复杂数据类型——指针 函数

系列文章 【golang学习之旅】使用VScode安装配置Go开发环境 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 【golang学习之旅】go mod tidy 【golang学习之旅】记录一次 p…

【嵌入式Linux】<总览> 进程间通信(更新中)

文章目录 前言 一、管道 1. 概念 2. 匿名管道 3. 有名管道 二、内存映射区 1. 概念 2. mmap函数 3. 进程间通信&#xff08;有血缘关系&#xff09; 4. 进程间通信&#xff08;没有血缘关系&#xff09; 5. 拷贝文件 前言 在文章【嵌入式Linux】&#xff1c;总览&a…

RAID详解及配置实战

目录 一、RAID磁盘阵列及详解 1.1 了解RAID 1.1.1 简单理解 1.1.2 对比了解 1.2 RAID磁盘阵列介绍 1.3 RAID功能实现 1.4 RAID实现的方式 1.5 RAID级别详解 1.5.1 RAID -0 1.5.2 RAID -1 1.5.3 RAID -5 1.5.4 RAID -10&#xff08;RAID 10&#xff09; 1.6 阵列卡…

2024年最新通信安全员考试题库,随时在线刷题

46.劳动防护用品不同于一般的商品&#xff0c;直接涉及到劳动者的生命安全和身体健康&#xff0c;故生产经营单位为从业人员提供的劳动防护用品必须符合&#xff08; &#xff09;或行业标准。 A.地方标准 B.国家标准 C.消防标准 D.LA劳安认证 答案:B 47.矿山、金属冶炼、…

本地可以Run大模型吗?Llama3?安排!

➡️ 前言 本地可以跑大模型吗? ChatGPT发布之后&#xff0c;引起了AI领域剧烈震动&#xff0c;从2023年3月百度发布新一代大预言模型文心一言开始&#xff0c;大模型如雨后春笋般不断涌现&#xff0c;国内阿里巴巴的通义千问、华为的盘古大模型、科大讯飞的星火认知大模型、…

大学网页制作作品1

作品须知&#xff1a;1.该网页作品预计分为5个页面&#xff08;其中1个登录页面&#xff0c;1个首页主页面&#xff0c;3个分页面&#xff09;&#xff0c;如需要可自行删改增加页面。&#xff08;总共约800行html,1200行css,100行js&#xff09; 2.此网页源代码只用于学习和模…

面相对象程序设计

面相对象程序设计包含内容如下 局域网聊天程序设网页浏览器设计电子日历记事本的设计 以其中的一个的报告进行举例 1需求与总体设计 1 1.1需求分析 1 1.2总体设计方案 1 1.2&#xff0e;1系统功能分析以及功能表 1 1.3系统类图的关系以及表之间的联系 2 2详细设计 3 2.1 Manag…

Linux系统学习——指令三

Linux系统学习——指令三 Linux系统学习——指令三chmod — 文件执行权限添加文件执行权限去除文件执行权限 查找文件中特定关键字使用vi编辑文件并查找特定关键字文本文件查找特定关键字1: 使用 grep 命令2: 使用 find 命令3: 使用 awk 命令4: 使用 sed 命令5: 使用 ag 命令&a…

RS232自由转Profinet协议网关模块连接1200PLC与扫码枪通讯及手动清零案例

一、RS232和Profinet这两种通讯接口的特点和应用场景&#xff1a; RS232是一种串行通讯接口标准&#xff0c;常用于连接计算机和外部设备&#xff0c;传输速率较低但稳定可靠。Profinet则是一种工业以太网通讯协议&#xff0c;具有高速、实时性强的特点&#xff0c;适用于工业…

群智优化:探索BP神经网络的最优配置

群智优化&#xff1a;探索BP神经网络的最优配置 一、数据集介绍 鸢尾花数据集最初由Edgar Anderson测量得到&#xff0c;而后在著名的统计学家和生物学家R.A Fisher于1936年发表的文章中被引入到统计和机器学习领域数据集特征&#xff1a; 鸢尾花数据集包含了150个样本&#…

【计算机毕业设计】167校园失物招领微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

适合实习生使用的工作笔记软件

作为一名初入职场的实习生&#xff0c;我每天都面临着海量的信息和工作任务。刚开始时&#xff0c;我常常手忙脚乱&#xff0c;生怕漏掉任何重要细节。对于实习生来说&#xff0c;好的工作笔记软件不仅能帮助我们系统地整理工作信息&#xff0c;还能提高工作效率&#xff0c;确…

数据结构---二叉树前中后序遍历

1. 某完全二叉树按层次输出&#xff08;同一层从左到右&#xff09;的序列为 ABCDEFGH 。该完全二叉树的前序序列为() A: ABDHECFG B: ABCDEFGH C: HDBEAFCG D: HDEBFGCA 2. 二叉树的先序遍历和中序遍历如下&#xff1a;先序遍历: EFHIGJK; 中序遍历: HFIEJKG. 则二叉…

最新AIGC系统源码-ChatGPT商业版系统源码,自定义ChatGPT指令Promp提示词,AI绘画系统,AI换脸、多模态识图理解文档分析

目录 一、前言 系统文档 二、系统演示 核心AI能力 系统快速体验 三、系统功能模块 3.1 AI全模型支持/插件系统 AI模型提问 文档分析 ​识图理解能力 3.2 GPts应用 3.2.1 GPTs应用 3.2.2 GPTs工作台 3.2.3 自定义创建Promp指令预设应用 3.3 AI专业绘画 3.3.1 文…