【C++学习————引用】

【C++学习——————引用】


在这里插入图片描述

欢迎阅读新一期的c++模块————引用

✒️个人主页:-Joker-

🏷️专栏:C++

📜代码仓库:c_code

🌹🌹欢迎大佬们的阅读和三连关注,顺着评论回访🌹🌹


文章目录

    • 【C++学习——————引用】
  • 引用介绍
  • 引用的特点
  • 引用的用法
    • 1.常引用
    • 2.常引用用法
    • 3.引用做参数
    • 引用做返回值
  • 引用和指针的区别
          • 1.语法层面的区别
          • 2.程序为指针变量分配内存区域,而不为引用分配内存区域。
          • 3.指针在解引用的时候需要使用 ‘ * ’,但是引用不需要解引用
          • 4.引用在定义之后不可修改(地址不可变),但是指针可以修改地址
          • 5.引用的++与指针的++的效果不一样


引用介绍

什么是引用

概念:引用是为已存在的变量取了一个别名,引用和引用的变量共用同一块内存空间

引用的格式:类型& 引用变量名(对象名) = 引用实体; int& ra = a; ra为a的引用


引用的特点

  • 引用实体和引用类型必须为同种类型
  • 引用在定义时必须初始化
  • 一个实体可以有多个引用,但一个引用只能引用一个实体
  • 没有空引用

引用的用法

1.常引用

常引用:const int &a=b
就相当于 const int * const a=b。不仅仅是a这个地址不可修改,而且其指向的内存空间也不可修改。
const修饰的类型必须使用常引用

例如

void Test1()
{const int a = 1;int& b = a; // 该语句编译时会出错,a为常量const int& c = a;double d = 1.00;int& rd = d; // 该语句编译时会出错,类型不同
}

2.常引用用法

1.引用普通变量

void Test2()
{int a = 10;int & b = a;const int& c = a;b += 10;a += 10;c += 10;//c不可修改所以会报错
}

2.引用常量

void Test3()
{int n = 1;const int m =2;int& x = n;const int& y = m; const int& z =1; return 0;
}

3.引用做参数

void Swap(int& a, int& b)
{int tmp = a;a = b;b = tmp;
}

引用做返回值

int& Test4(int& a)
{a+=20;return a;
}

引用和指针的区别

1.语法层面的区别

从语法规则上讲,指针变量是某个变量或对象的地址,而引用是某个实例的别名。

2.程序为指针变量分配内存区域,而不为引用分配内存区域。
	int a = 10;int* p = &a;//指针p取a的地址,需要分配内存int& b = a;//b是a的别名,并不需要分配空间
3.指针在解引用的时候需要使用 ‘ * ’,但是引用不需要解引用
	int a = 10;int* p = &a;int& b = a;*p = 20;//指针想要对a的值修改需要解引用b = 20;//b只是a的别名所以可以直接修改
4.引用在定义之后不可修改(地址不可变),但是指针可以修改地址
	int a = 10;int* p = &a;int& x = a;int b = 20;p = &b;//p的地址由a变成了b的地址x = b;//==> a = 20
5.引用的++与指针的++的效果不一样
	int a = 10;int* p = &a;int& b = a;printf("p = %p, b = %d\n", p, b);p++;b++;printf("p = %p, b = %d", p, b);

由
由此我们可以看出指针++是让地址改变,而引用++则是对a的值进行改变

综上所述 :引用本身是一个变量,但是这个变量又仅仅是另外一个变量一个别名,它不占用内存空间,它不是指针哦!仅仅是一个别名!


以上就是对C++引用的介绍,各位老爷别忘了给个支持三连🌹🌹

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

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

相关文章

对可恢复的情况使用受检异常

在Java中,受检异常(Checked Exception)通常用于表示程序能够预期并且可能进行恢复的异常情况。这类异常是在编译时由编译器强制进行处理的,使得程序员必须显式处理这些异常,或者在方法签名中使用 throws 关键字声明。 …

react之项目打包,本地预览,路由懒加载,打包体积分析以及如何配置CDN

react之项目打包,本地预览,路由懒加载,打包体积分析以及如何配置CDN 一、项目打包二、项目本地预览三、路由懒加载四、打包体积分析五、配置CDN 一、项目打包 执行命令 npm run build根目录下生成的build文件夹 及时打包后的文件 二、项目本地预览 1.全局安装本地服务包 npm…

【Linux】介绍:进程退出、进程等待、进程程序替换

目录 一、进程退出 _exit函数 exit函数 _exit()与exit比较 return退出 二、进程等待 wait方法 waitpid方法 三、进程程序替换 替换函数 函数解释 命名理解 使用举例 一、进程退出 正常终止(可以通过 echo $? 查看进程退出码):1.…

Ubuntu22.04切换用户

一、只有一个用户时没有切换用户菜单项 1、用户信息 cat /etc/passwd 2、系统菜单 二、添加用户 添加新用户ym,全名yang mi 三、有两个及以上的用户时出现切换用户菜单项 1、用户信息 cat /etc/passwd 2、系统菜单 四、切换用户 1、点击上图中Switch User …

爬虫 scrapy ——scrapy shell调试及下载当当网数据(十一)

目录 一、scrapy shell 1.什么是scrapy shell? 2.安装 ipython 3.使用scrapy shell 二、当当网案例 1.在items.py中定义数据结构 2.在dang.py中解析数据 3.使用pipeline保存 4.多条管道的使用 5.多页下载 参考 一、scrapy shell 1.什么是scrapy shell&am…

【如何提取React项目中的公共模块,多个项目共用】

文章目录 目录 前言 一、创建公共模块 二、初始化公共模块 三、给公共模块添加内容 四、添加对公共模块的依赖 五、使用公共模块里的资源 后记 前言 在工作中经常会遇到这样的需求,有个React项目,代码分为客户端,管理端两份&#xff…

Vue3-21-组件-子组件给父组件发送事件

情景描述 【子组件】中有一个按钮,点击按钮,触发一个事件, 我们希望这个事件的处理逻辑是,给【父组件】发送一条消息过去, 从而实现 【子组件】给【父组件】通信的效果。这个问题的解决就是 “发送事件” 这个操作。 …

arthas获取spring bean

参考文章 arthas获取spring bean 写一个工具Util package com.example.lredisson.util;import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import o…

HarmonyOS给应用添加消息通知

给您的应用添加通知 通知介绍 通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景…

Cell Systems | 深度学习开启蛋白质设计新时代

今天为大家介绍的是来自Bruno Correia团队的一篇综述。深度学习领域的迅速进步对蛋白质设计产生了显著影响。最近,深度学习方法在蛋白质结构预测方面取得了重大突破,使我们能够得到数百万种蛋白质的高质量模型。结合用于生成建模和序列分析的新型架构&am…

相机倾斜棋盘格标定全记录 vs200+opencv安装

论文参考是这个 Geiger A, Moosmann F, Car , et al. Automatic camera and range sensor calibration using a single shot[C]//Robotics and Automation (ICRA), 2012 IEEE International Conference on. IEEE, 2012: 3936-3943. 代码是这个github 花了一上午配好了c环境。。…

Flink系列之:SQL提示

Flink系列之:SQL提示 一、动态表选项二、语法三、例子四、查询提示五、句法六、加入提示七、播送八、随机散列九、随机合并十、嵌套循环十一、LOOKUP十二、进一步说明十三、故障排除十四、连接提示中的冲突案例十五、什么是查询块 SQL 提示可以与 SQL 语句一起使用来…

Sci. Rep. | 一个对任意分子体系实现准确且高效几何深度学习的通用框架

这篇工作是来自纽约城市大学/康奈尔医学院谢磊团队的一篇论文。作者提出了一个通用框架,PAMNet,可以对任意分子体系实现准确且高效的几何深度学习。在小分子性质、RNA三维结构以及蛋白质-配体结合亲和力的预测任务上,PAMNet在准确性和效率方面…

【ESXi】ESXi 版本回退

目录 8. ESXi 版本回退8.1 版本回退条件与注意事项8.2 版本回退步骤8.3 示例演示(1)准备工作(2)进入DCUI界面(3)按 F11 重启系统引导(4)进入引导选项(5)进入 …

弧形导轨的精度等级

为符合工控自动化生产制造必须,弧形导轨在运输武器装备领域应时而生,并已在电子生产制造、手机上、半导体材料、动力锂电池等领域获得广泛运用。其中,弧形导轨的精度等级是评估其运动精度的重要指标,通常包括制造精度和运行精度两…

Flink系列之:大状态与 Checkpoint 调优

Flink系列之:大状态与 Checkpoint 调优 一、概述二、监控状态和 Checkpoints三、Checkpoint 调优四、RocksDB 调优五、增量 Checkpoint六、RocksDB 或 JVM 堆中的计时器七、RocksDB 内存调优八、容量规划九、压缩十、Task 本地恢复十一、主要(分布式存储…

spring-kakfa依赖管理之org/springframework/kafka/listener/CommonErrorHandler错误

问题: 整个项目使用spring-boot2.6.8版本,使用gradle构建,在common模块指定了implementation org.springframework.kafka:spring-kafka:2.6.8’这个工程也都能运行(这正常发送kafka消息和接收消息),但是执行…

java --- 集合进阶

目录 一、单列集合顶层接口 Collection 1.1 基本方法 1.2 Collection 的遍历方式 二、list集合 1.2 ArrayList Vector 底层结构 1.3 LinkedList ArrayList 和 LinkedList 比较 三、set接口 3.1、Set 接口和常用方法 3.2 HashSet HashSet 底层机制(HashMap…

Python【Matplotlib】图例可拖动改变位置

代码: import matplotlib.pyplot as plt from matplotlib.widgets import Button# 创建一个示例图形 fig, ax plt.subplots() line, ax.plot([1, 2, 3], labelLine 1)# 添加图例 legend ax.legend(locupper right, draggableTrue)# 添加一个按钮,用于…

mybatis动态SQL-sql片段

1、建库建表 create database mybatis-example; use mybatis-example; create table emp (empNo varchar(40),empName varchar(100),sal int,deptno varchar(10) ); insert into emp values(e001,张三,8000,d001); insert into emp values(e002,李四,9000,d001); insert into…