C++基础知识——引用

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。
P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。

  

请添加图片描述

                                           博主主页:Yan. yan.
                                              C语言专栏
                                            数据结构专栏
                                         力扣牛客经典题目专栏
                                                     C++专栏

文章目录

  • 1、引用的概念
  • 2、引用的特性
  • 3、常引用
  • 4、引用的使用场景
    • 1、做参数
    • 2、做返回值
  • 5、传值与传引用的比较
    • 1、效率比较
    • 2、作为返回值类型的性能比较
  • 6、引用与指针区别
    • 引用和指针的不同点

1、引用的概念

  引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间


  例如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。
在这里插入图片描述
类型& 引用变量名(对象名) = 引用实体;
在这里插入图片描述


  上面图片中的a和b所指的是同一个东西,只是名字不同。
  注意::引用类型必须和引用实体是同种类型的

2、引用的特性

  • 引用在定义时必须初始化
    在这里插入图片描述
  • 一个变量可以有多个引用
    在这里插入图片描述
  • 引用一旦引用一个实体,再不能引用其他实体。
    在这里插入图片描述

3、常引用

  在C++中,常引用时通过在引用声明前加上const关键字来定义的,常引用语法如下所示:

const int& a

  常引用时,其权限可以平移、缩小,但是不能放大。
  • 放大【✘】
    在这里插入图片描述

  • 缩小【✔】
    在这里插入图片描述

  • 平移【✔】
    在这里插入图片描述

4、引用的使用场景

1、做参数

  以交换两个变量的值为例,在C语言中我们常用的是运用指针,通过修改变量的地址来达到交换的目的

在这里插入图片描述

40749e1cea93fad4f2b5.png)
  而现在学习了引用之后,就可以通过将引用作为参数的方法,直接修改变量。

在这里插入图片描述

2、做返回值

在这里插入图片描述


  这里的返回值为什么事5呢?

在这里插入图片描述
注意::如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用
引用返回,如果已经还给系统了,则必须使用传值返回。

5、传值与传引用的比较

  以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。

1、效率比较

在这里插入图片描述
  由上述代码可见,传引用比传值效率要快的多。因为编译器在运行时不会给引用变量开辟额外的空间。

2、作为返回值类型的性能比较

在这里插入图片描述
  通过上述代码的比较,发现传值和指针在作为传参以及返回值类型上效率相差很大

6、引用与指针区别

  在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间
在这里插入图片描述
  在底层实现上实际是有空间的,因为引用是按照指针方式来实现的
在这里插入图片描述


引用和指针的不同点

  1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
  2. 引用在定义时必须初始化,指针没有要求
  3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何
    一个同类型实体
  4. 没有NULL引用,但有NULL指针
  5. **在sizeof中含义不同:**引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32
    位平台下占4个字节)
  6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
  7. 有多级指针,但是没有多级引用
  8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  9. 引用比指针使用起来相对更安全

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

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

相关文章

速盾:使用 CDN 可以隐藏 IP 吗?该怎样应对防御?

在网络技术领域,CDN(内容分发网络)是一项被广泛应用的技术。那么,使用 CDN 是否可以隐藏 IP 地址呢? 从一定程度上来说,CDN 可以在某种意义上起到对原始服务器 IP 地址的隐藏作用。CDN 会在其网络中缓存内容…

让你的Python代码更简洁:一篇文章带你了解Python列表推导式

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 列表推导式 📒📝 语法📝 条件筛选📝 多重循环📝 列表推导式的优点📝 使用场景📝 示例代码🎯 示例1🎯 示例2⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,列表推导式是一种强大且高效的语法,它允许你用…

微信小程序页面的交互

微信小程序页面交互设计详解 一、引言 微信小程序作为轻量级的应用程序,其页面交互设计对于提升用户体验至关重要。本文将深入解析微信小程序页面交互设计的基本原理,以及如何通过API和组件实现丰富的交互效果。 二、页面结构与基础组件 页面结构&…

【Linux】linux系统命令

文件和目录操作: ls: 列出目录中的文件和子目录。cd: 切换当前工作目录。pwd: 显示当前工作目录的路径。mkdir: 创建新目录。rm: 删除文件或目录。cp: 复制文件或目录。mv: 移动文件或目录,也可以用于重命名。文本操作: cat: 连接文件并打印到…

Java程序之素数问题

题目: 判断101-200之间有多少个素数,并输出所有素数。 程序分析: 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。素数被利用在密码学上&#…

【408考点之数据结构】线性表的链式表示实现代码

线性表的链式表示 在数据结构中,线性表是一种常见的结构,用于存储和管理一组有序的元素。线性表的链式表示是一种灵活且高效的存储方式,特别适用于频繁插入和删除操作的场景。下面我们来探讨单链表、循环链表和双向链表的特点和实现。 单链…

算法设计与分析 笔记

截图摘自湖南大学彭鹏老师的ppt。笔记也是根据他的ppt整理的。 动态规划 核心 用数组记录中间结果,避免重复计算 三角数塔问题 问题描述 给定一个三角形数塔,从顶部出发,每次只能移动到下一行的相邻元素。要求找到一条路径,…

Mac 本地启动 Dify

本地启动 dify 拉取 dify 文件 git clone https://github.com/langgenius/dify.git启动底层服务 cd dify/docker docker-compose -f docker-compose.middleware.yaml -p dify up -d启动后端 API 安装 poetry brew install poetry配置 cd ../api cp .env.example .env sed…

VS Code安装及环境配置(超详细)

VS Code简介 Visual Studio Code(简称 VS Code )是 Microsoft 于2015年4月发布的一款代码编辑器,以界面简洁、轻量著称。 它是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流开发语言的语法高亮、智能代码补全、自定义…

【HTTPS云证书部署】SpingBoot部署证书

这里以华为云证书为例。 1. 下载证书 2. 解压 3. 选择.top_Tomcat复制到SpringBoot的Resource/source下 4. 在.properties文件中进行配置 修改key-store和key-store-password

[面试题]Jenkins

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…

刷题——比较版本号

比较版本号_牛客题霸_牛客网 int compare(string version1, string version2) {int len1 version1.size();int len2 version2.size();int i0,j0;while(i<len1 || j <len2){long num1 0 ;while(i <len1 && version1.charAt(i) ! .){num1 num1*10 (version1…

理解什么是DSR,嗅探器视角下的IP和MAC地址识别(C/C++代码实现)

网络嗅探器是监控和分析网络流量的一种工具&#xff0c;它能够捕获数据包并提取出关键的信息&#xff0c;比如IP地址和MAC地址。 网络嗅探器工作原理基于网卡的工作模式。正常情况下&#xff0c;网卡只处理发送给它的数据包&#xff0c;忽略其他数据。但是&#xff0c;如果将网…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-29残差网络ResNet

29残差网络ResNet import torch from torch import nn from torch.nn import functional as F import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个继承自nn.Module的残差块类 class Residual(nn.Module):def __init__(self, input_channels, num_chan…

如何培养员工的竞争意识

一、背景 在当今快速变化的商业环境中,培养员工的竞争意识对于企业的长期成功至关重要。通过激发员工的竞争精神,企业能够提升整体绩效,增强创新能力,并在市场竞争中保持领先地位。本文将从多个方面探讨如何培养员工的竞争意识。 二、明确目标设定 设定清晰具体的目标:明…

技术性屏蔽百度爬虫已经一周了!

很久前明月就发现百度爬虫只抓取、只收录就是不给流量了&#xff0c;加上百度搜索体验越来越差&#xff0c;反正明月已经很久没有用过百度搜索&#xff0c;目前使用的浏览器几乎默认搜索都已经修改成其他搜索引擎了&#xff0c;真要搜索什么&#xff0c;一般都是必应谷歌结合着…

企业ERP系统规划图

企业ERP系统规划图 1. 基础架构层 - 硬件&#xff1a;服务器、存储设备、网络设备 - 软件&#xff1a;操作系统、数据库管理系统、中间件 2. 数据管理与集成层 - 数据仓库&#xff1a;集中存储企业数据 - 数据集成&#xff1a;ETL&#xff08;Extract, Transform…

Java数据类型转换

Java中的数据类型转换分为两种&#xff1a;隐式转换&#xff08;也称作自动类型转换&#xff09;和显式转换&#xff08;也称作强制类型转换&#xff09;。隐式转换发生在低精度的数据类型向高精度的数据类型转换时&#xff0c;这种转换是安全的&#xff0c;不会导致数据丢失。…

uni-CMS:全端开源内容管理系统的技术探索

摘要 本文介绍了uni-CMS&#xff0c;一个基于uniCloud开发的开源内容管理系统&#xff08;CMS&#xff09;。该系统旨在帮助开发者快速搭建并管理内容丰富的网站、小程序和移动应用。通过其全端渲染、内容安全检测、广告解锁付费内容以及AI生成文章等特性&#xff0c;uni-CMS不…

cesium 添加 Echarts 饼图

cesium 添加 Echarts 饼图 1、实现思路 1、首先创建echarts饼图,拿到创建好的canvas 2、用echarts里面生成的canvas添加到cesium billboard中 2、示例代码 <!DOCTYPE html> <html lang="en"><head><