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

news2024/12/23 5:12:41

【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.coloradmin.cn/o/1317704.html

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

相关文章

秋招上岸记录咕咕咕了。

思考了一下,感觉并没有单独写这样一篇博客的必要。 能够写出来的,一些可能会对人有帮助的东西都做进了视频里面,未来会在blbl发布,目前剪辑正在施工中(?) 另外就是,那个视频里面使…

Win11 跑通tensorRT

cuda_12.3.1_546.12_windows TensorRT-8.6.1.6.Windows10.x86_64.cuda-12.0 cudnn-windows-x86_64-8.9.7.29_cuda12-archive 准备 1.安装cuda,成功之后文件夹如下图所示 2.下载cudnn,把cudnn对应的文件放在cuda里面 3.安装vs 4.安装对应cuda版本的te…

DevOps常用工具全家桶,实现高效运维和交付

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…

Linux c++开发-06-使用Linux API 进行文件的读写

先简单的介绍一下open,read,write 先用open接口去打开文件,flag表示打开文件的权限不同。 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);示例 结果:

基于AT89C51单片机的LED点阵显示屏设计

点击链接获取Keil源码与Project Backups仿真图: [[https://download.csdn.net/download/qq_64505944/88637464?spm1001.2014.3001.5503]] **[源码获取] B 源码仿真图课程设计50 工程实训(三)课题设计 班级: …

FPGA — Vivado下ILA(逻辑分析仪)详细使用方法

使用软件: Vivado 开发板: EGO1采用Xilinx Artix-7系列XC7A35T-1CSG324C FPGA 使用程序:按键案例 ILA详细使用方法 一、ILA简介二、ILA的使用方法方法1 — 使用IP核创建ILA调试环境创建ILA IP核 方法二 — 使用 Debug 标记创建 ILA对需观察信…

使用IDEA创建springboot依赖下载很慢,解决方法

显示一直在resolving dependencies,速度很慢 原因:maven会使用远程仓库来加载依赖,是一个国外的网站,所以会很慢。应该使用阿里云的镜像,这样速度会提升很多。 步骤:1.右击pom.xml,选择"m…

DevEco Studio 项目鸿蒙(HarmonyOS)多语言

DevEco Studio 项目鸿蒙(HarmonyOS)多语言 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、多语言 新版本IDE可以创建多语言的文件夹,在entry->src->main->resources下,修…

图像识别完整项目之Swin-Transformer,从获取关键词数据集到训练的完整过程

0. 前言 图像分类的大部分经典神经网络已经全部介绍完,并且已经作了测试 代码已经全部上传到资源,根据文章名或者关键词搜索即可 LeNet :pytorch 搭建 LeNet 网络对 CIFAR-10 图片分类 AlexNet : pytorch 搭建AlexNet 对花进行分…

为什么Apache Doris适合做大数据的复杂计算,MySQL不适合?

为什么Apache Doris适合做大数据的复杂计算,MySQL不适合? 一、背景说明二、DB架构差异三、数据结构差异四、存储结构差异五、总结 一、背景说明 经常有小伙伴发出这类直击灵魂的疑问: Q:“为什么Apache Doris适合做大数据的复杂计…

相机倾斜棋盘格标定全记录 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环境。。…

Activiti工作流框架学习笔记(一)之通用数据表详细介绍

文/朱季谦 Activiti工作流引擎自带了一套数据库表,这里面有一个需要注意的地方: 低于5.6.4的MySQL版本不支持时间戳或毫秒级的日期。更糟糕的是,某些版本在尝试创建此类列时将引发异常,而其他版本则不会。执行自动创建/升级时&a…

ARM架构简析

全局与局量等知识 断电后,程序以及数据都在FLASH中。 断电后,内存中就没有变量了。 程序在烧在FLASH中的; 程序运行的时候,全局变量的初始值,必然是从FLAASH中的来的: 初始化全局变量的过程:…

HBuilder X将Vue打包APP返回上一页退出问题、清除缓存页面历史防止返回登录页(上一页)、以及状态栏颜色切换

目录 一、返回上一页退出问题 二、清除缓存页面历史防止返回上一页 三、状态栏颜色切换 一、返回上一页退出问题 1.首先重新认识一下vue的页面跳转,这里我只说常用到的两个 goSkip(){//直接跳转this.$router.push(/test);this.$router.replace(/test);//带参数跳…

一键安装下载3ds Max!别墅还是宫殿?3ds Max助你建造梦幻般的艺术建筑

不再浪费时间在网上寻找3ds Max的安装包了!因为你所需要的一切都可以在这里找到!作为一款全球领先的3D设计工具,3ds Max为创作者们带来了前所未有的便利和创作灵感。无论是建筑设计、影视特效还是游戏开发,3ds Max都能帮助你实现想…

后端开发——统一处理异常Spring MVC机制

一、Spring MVC的统一处理异常机制 在Spring MVC中,存在统一处理异常的机制, 具体表现为:无论是哪个处理请求的过程中出现异常,每种类型的异常只需要编写一段处理异常的代码即可! 统一处理异常的核心是定义处理异常的…

软件开发模型学习整理——瀑布模型

一 前言 从参加工作至今也完整的跟随过一整个项目的流程了,从中也接触到了像瀑布模型,迭代模型,快速开发模型等。介于此,基于自己浅薄的知识对瀑布模型进行整理学习以及归纳。 二 瀑布模型简介 2.1 瀑布模型的定义和特点 定义&…

Linux 动态库和静态库

文章目录 前言动态库创建和使用静态库创建和使用动态库和静态库差异生成过程的差异运行效果的差异 补充说明库的名称的注意事项库的搜索路径的方法什么是位置无关代码动态链接与静态链接/usr/lib 和 /usr/local/lib 前言 动静态库的创建和使用部分更多的是意在说明动态库和静态…

软件测试指南

软件测试指南 软件集成测试软件系统测试(功能性测试,性能测试)

dp中最短编辑距离的笔记(分析dp)

dp分析往往就是看最后一步的变化。 分析: 设a串长度为i,b串长度为j。题目要求为通过三种操作将a字符串转化为b字符串的最少次数。 删除操作: 把a[i]删除后a[1~i]和b[1~j]匹配,所以可以得到f[i - 1][j] 1,在此之前要先…