【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++引用的介绍,各位老爷别忘了给个支持三连🌹🌹

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows10 如何开机自动启动redis

前言 当我们在Windows 10上使用Redis时,通常希望能够使Redis服务在系统启动时自动启动,以便我们无需手动介入就能够方便地访问和管理数据。在这个过程中,我们将通过下载、安装和配置Redis为Windows服务的方式,使其成为系统的一部分…

[RTOS移植]--STM32F767移植RTThread

文章目录 通过STM32cube创建一个工程选择要移植的RTOS源下载到本地如果没有重启软件选择对应配置后续补充 通过STM32cube创建一个工程 选择要移植的RTOS源 下载到本地 如果没有重启软件 选择对应配置 Build started: Project: STM32F767 *** Using Compiler V5.06 update 7 (b…

FLStudio2024完整版水果音乐编曲制作软件

FL Studio2024是款专业的音频录制编辑软件,可以针对作曲者的要求编辑出不同音律的节奏,例如鼓、镲、锣、钢琴、笛、大提琴等等任何乐器的节奏律动。FL Studio目前在中国已经受到广大制作人喜爱,使用它制作的音乐作品也已经数不胜数&#xff0…

同义词替换在论文降重中的实际效果评估 快码论文

大家好,今天来聊聊同义词替换在论文降重中的实际效果评估,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 标题:同义词替换在论文降重中的实际效果评…

NestJS入门手册:零基础开发第一个 HTTP 接口

前言 NestJS 是一个用于开发高效、可扩展的 Node.js 服务器端应用程序的框架。其优雅的 TypeScript 支持和深度集成的系统模块,使得开发复杂的后端服务变得前所未有的简单。在这篇文章中,我们将介绍 NestJS 的基础知识,帮助你快速入门。 准…

如何实现分布式调用跟踪?

分布式服务拆分以后,系统变得日趋复杂,业务的调用链也越来越长,如何快速定位线上故障,就需要依赖分布式调用跟踪技术。下面我们一起来看下分布式调用链相关的实现。 为什么需要分布式调用跟踪 随着分布式服务架构的流行&#xf…

软件测试基础知识总结

软件测试的IEEE定义:使用人工或自动的手段来运行或测量软件系统的过程,目的是检验软件系统是否满足规定的需求,并找出与预期结果之间的差异。 软件测试的发展趋势: ① 测试工作将进一步前移。软件测试不仅仅是单元测试、集成测…

【消息中间件】Rabbitmq的基本要素、生产和消费、发布和订阅

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、消息队列的基本要素1.队列:queue2.交换机:exchange3.事件:routing_key4.任务:task 二、生产消费模式1.安装pika2.模拟生产者进程3.模…

虚拟机Linux(Centos7)安装Docker

如果没有安装虚拟机的,可以参考这篇VMware虚拟机安装Linux操作系统(CentOS7) 文章目录 0.安装Docker1.CentOS安装Docker1.1.卸载(可选)如何看自己的虚拟机上是否安装过docker? 1.2.安装docker1.3.启动docke…

【观测宇宙】

这个网站一眼看清整个宇宙。可观测范围一亿光年。 Cocosmos | 掌上宇宙 作者开发介绍:Cocosmos 序章 | 掌中宇宙,浩瀚星海,一眼万年 (qq.com)

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

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

【深度强化学习】TRPO、PPO

策略梯度的缺点 步长难以确定,一旦步长选的不好,就导致恶性循环 步长不合适 → 策略变差 → 采集的数据变差 → (回报 / 梯度导致的)步长不合适 步长不合适 \to 策略变差 \to 采集的数据变差 \to (回报/梯度导致的&am…

RabbitMQ 消息持久化

默认情况下,exchange、queue、message 等数据都是存储在内存中的,这意味着如果 RabbitMQ 重启、关闭、宕机时所有的信息都将丢失。 RabbitMQ 提供了持久化来解决这个问题,持久化后,如果 RabbitMQ 发送 重启、关闭、宕机&#xff…

信息安全和网络安全的区别

信息安全与网络安全都属于安全领域,但它们的范围和重点不同。 信息安全主要关注数据的保护,包括对敏感数据进行加密、防止数据丢失或泄露等措施。信息安全通常与数据存储、传输和处理相关。 而网络安全更侧重于保护计算机系统和网络免受攻击、病毒、蠕…

C++类与对象 (上)

目录 前言: 类和对象的理解 类的引入 类的定义与使用方式 访问限定符 类的两种定义方式 成员变量的命名规则 类的作用域 类的实例化 类对象模型 计算类对象的大小 类对象的存储方式 this指针 前言: C语言是面向过程的,关注的是过…

我想开发一款跨平台桌面软件,请告诉我qt、electron、tauri、pyqt、flutter分别适合开发哪些跨平台桌面

不同的跨平台桌面开发工具适用于不同的应用场景和开发者需求。以下是关于 Qt、Electron、Tauri、PyQt、Flutter 的简要说明,以帮助你更好地选择适合你项目的工具: Qt: 适用场景: Qt 是一个强大的 C 框架,适用于开发需要高性能和原…

【LeetCode】数组精选17题——双指针、滑动窗口、前缀和

目录 快慢指针: 1. 移动零(简单) 2. 复写零(简单) 对撞指针: 1. 两数之和 II - 输入有序数组(中等) 2. 三数之和(中等) 3. 有效三角形的个数&#xff…

python语言中“缩进”说法,python中的缩进规则

本篇文章给大家谈谈python语言中“缩进”说法,以及python中的缩进规则,希望对各位有所帮助,不要忘了收藏本站喔。 缩进是Python的灵魂 Python是一门独特的语言,它的代码块是通过缩进(Indentation)来标记的&…

QT自带打包问题:无法定位程序输入点?metaobject@qsound

文章目录 无法定位程序输入点?metaobjectqsound……检查系统环境变量的配置:打包无须安装qt的文件 无法定位程序输入点?metaobjectqsound…… 在执行release打包程序后,相应的release文件夹下的exe文件,无法打开 如有错误欢迎指出 检查系…

LCR 181. 字符串中的单词反转

解题思路: class Solution {public String reverseMessage(String message) {message message.trim(); // 删除首尾空格int j message.length() - 1, i j;StringBuilder res new StringBuilder();while (i > 0) {while (i >…