C++引用简介

news2024/9/20 22:49:49

引用的基本使用:

作用: 给变量起别名

语法: 数据类型 &别名 = 原名

int main() {

	int a = 10;
	int &b = a;

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
//都打印10
	b = 100;

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
//都打印100
	system("pause");

	return 0;
}

引用注意事项:

  • 引用必须初始化

  • 引用在初始化后,不可以改变

    int main() {
    
    	int a = 10;
    	int b = 20;
    	//int &c; //错误,引用必须初始化
    	int &c = a; //一旦初始化后,就不可以更改
    	c = b; //这是赋值操作,不是更改引用
    
    	cout << "a = " << a << endl;
    	cout << "b = " << b << endl;
    	cout << "c = " << c << endl;
    
    	system("pause");
    
    	return 0;
    }

    引用做函数参数:

  • 作用:函数传参时,可以利用引用的技术让形参修饰实参

  • 优点:可以简化指针修改实参

  • //1. 值传递
    void mySwap01(int a, int b) {
    	int temp = a;
    	a = b;
    	b = temp;
    }
    
    //2. 地址传递
    void mySwap02(int* a, int* b) {
    	int temp = *a;
    	*a = *b;
    	*b = temp;
    }
    
    //3. 引用传递
    void mySwap03(int& a, int& b) {
    	int temp = a;
    	a = b;
    	b = temp;
    }
    
    int main() {
    
    	int a = 10;
    	int b = 20;
    
    	mySwap01(a, b);
    	cout << "a:" << a << " b:" << b << endl;
    
    	mySwap02(&a, &b);
    	cout << "a:" << a << " b:" << b << endl;
    
    	mySwap03(a, b);
    	cout << "a:" << a << " b:" << b << endl;
    
    	system("pause");
    
    	return 0;
    }

    总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单

引用做函数返回值

作用:引用是可以作为函数的返回值存在的

注意:不要返回局部变量引用

用法:函数调用作为左值

//返回局部变量引用
int& test01() {
	int a = 10; //局部变量
	return a;
}

//返回静态变量引用
int& test02() {
	static int a = 20;
	return a;
}

int main() {

	//不能返回局部变量的引用
	int& ref = test01();
	cout << "ref = " << ref << endl;
	cout << "ref = " << ref << endl;

	//如果函数做左值,那么必须返回引用
	int& ref2 = test02();
	cout << "ref2 = " << ref2 << endl;
	cout << "ref2 = " << ref2 << endl;

	test02() = 1000;

	cout << "ref2 = " << ref2 << endl;
	cout << "ref2 = " << ref2 << endl;

	system("pause");

	return 0;
}

 

引用的本质

本质:引用的本质在c++内部实现是一个指针常量.

讲解示例:

//发现是引用,转换为 int* const ref = &a;
void func(int& ref){
	ref = 100; // ref是引用,转换为*ref = 100
}
int main(){
	int a = 10;
    
    //自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改
	int& ref = a; 
	ref = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20;
    
	cout << "a:" << a << endl;
	cout << "ref:" << ref << endl;
    
	func(a);
	return 0;
}

结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了

反汇编:

看到操作是类似的

指针和引用的不同点:

引用概念上定义一个变量的别名,指针存储一个变量地址。

引用在定义时必须初始化,指针就没有要求。

引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以再任何时候指向任何一个同类型实体。

没有NULL引用,但是有NULL指针

在sizeof中含义不同:引用结果为引用类型的大小,但是指针始终是地址空间所占字节数个(根据所在平台确定,如32位平台占4个字节) 引用自加即引用的实体加1,指针自加即指针向后偏移一个类型的大小。

由多级指针,但是没有多级引用。

访问实体方式不同,指针需要显示解引用,引用编译器自己处理。

引用比指针使用起来相对安全。

 

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

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

相关文章

C++入门基础知识51——【关于C++数字】之C++随机数

成长路上不孤单&#x1f60a;【14后&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;如有需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#xff01;&#xff01;&#xff01;&#xff01;&#xff…

ArcGIS之建模处理栅格数据以表格显示分区统计(以夜间灯光数据为例)

当需要计算一个shp数据中多个面中的栅格数据值是&#xff0c;可以通过模型构建器进行批量处理&#xff0c;也就是统计多个面中的栅格数据值。但在处理过程中可能会遇见不同的错误&#xff0c;本文会介绍ERROR000883的解决办法。 数据准备&#xff1a;一个shp数据&#xff08;例…

如何在极狐GitLab中添加 SSH Key?

本文分享如何生成 SSH Key 并添加到极狐GitLab 中&#xff0c;然后用 SSH Key 进行代码拉取。 极狐GitLab 是 GitLab 在中国的发行版&#xff0c;可以私有化部署&#xff0c;对中文的支持非常友好&#xff0c;是专为中国程序员和企业推出的企业级一体化 DevOps 平台&#xff0…

c++ string中append/push_back/insert的区别以及erase/pop_back的区别

一.append/push_back/insert的区别 append是在末尾追加字符或字符串 如上的几种用法。注意第二个&#xff0c;它的第三个参数不是结束位置&#xff0c;而是要追加的长度&#xff1b;要追加的字符串可以用string对象表示&#xff0c;也可以用字符指针表示&#xff1b;也可以用于…

TMGM:美国贸易逆差扩大将对第三季度GDP增长产生压力

七月份&#xff0c;美国的进口量激增&#xff0c;导致国际贸易逆差扩大至一年半以来的最大位置&#xff0c;并使净出口再次从第三季度实际GDP增长中扣除超过半个百分点。 七月份&#xff0c;美国的国际贸易逆差扩大了58亿美元&#xff0c;至788亿美元&#xff08;图表&#xf…

『功能项目』DOTween动态文字【26】

打开上一篇25协程生成怪物模型的项目&#xff0c; 本章要做的事情是用DOTween插件做一个动态文字效果 首先在资源商店中免费下载一个DOTween插件 新建脚本&#xff1a;DowteenFlicker.cs 编写脚本&#xff1a; using DG.Tweening; using UnityEngine; using UnityEngine.UI;pu…

如何在算家云搭建Qwen2(智能对话)

一、Qwen2简介 Qwen2 是由阿里云通义千问团队研发的新一代大型语言模型系列&#xff0c;它在多个方面实现了技术的飞跃和性能的显著提升。以下是对 Qwen2 的详细介绍&#xff1a; GitHub - QwenLM/Qwen2: Qwen2 is the large language model series developed by Qwen team, …

从0到1深入理解vite

一、什么是构建工具 ts:如果遇到ts文件&#xff0c;我们需要使用tsc把ts转换为jsreact/vue &#xff1a; 安装react-compiler、vue-conplier 将我们写的jsx或者vue文件转换成render函数less/sass/postcss/somponent-style:我们又需要less-loader、sass-loader等一系列编译工具…

锡废水的废水处理回收

锡废水的废水处理回收是一个综合性的环保过程&#xff0c;旨在从含有锡的废水中提取并回收锡资源&#xff0c;同时减少废水对环境的污染。以下是对锡废水处理回收的详细分析&#xff1a; 一、处理回收意义 锡是一种重要的金属资源&#xff0c;广泛应用于电子、化工、建筑等多个…

HTB-Funnel(ssh端口转发与Hydra爆破)

前言 各位师傅大家好&#xff0c;我是qmx_07,今天给大家讲解Funnel靶机 渗透过程 信息搜集 服务器开放了21FTP端口&#xff0c;22SSH端口&#xff0c;通过sC脚本检测&#xff0c;发现存在匿名登录 FTP匿名登录 发现两个文件尝试下载:password_policy.pdf welcome_28112022…

数据漂移分类——稚嫩版

概念漂移虚拟概念漂移 虚拟概念漂移中分类边界不变的原因是&#xff0c;把分类边界归为网站特征所有&#xff0c;理解为是有网站流量特有的特征构建出来的&#xff0c;但是实际上并不是&#xff0c;网络等因素导致的流量变化也是最终分类边界形成的影响之一&#xff0c;所以我认…

Spring Boot:医护人员排班系统开发的技术选择

5系统详细实现 5.1 医护类型管理 医护人员排班系统的系统管理员可以对医护类型添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 医护类型管理界面 5.2 排班类型管理 管理员可以对排班类型进行添加修改删除操作。具体界面如图5.2所示。 图5.2 排班类型界面 5.…

Xinstall助力应用运营,注册参数获取更高效!

随着移动互联网的迅猛发展&#xff0c;应用推广已成为各大企业营销的重要一环。然而&#xff0c;在应用推广过程中&#xff0c;如何准确获取用户的注册参数&#xff0c;一直是困扰推广者的难题。今天&#xff0c;我们就来聊聊Xinstall这一神器&#xff0c;看看它如何助力应用轻…

低代码平台中的统一认证与单点登录(SSO):实现简化与安全的用户管理

引言 在现代应用开发中&#xff0c;用户管理是一个关键环节。随着应用数量的增加&#xff0c;传统的用户认证和管理方式逐渐显得繁琐且不够高效。低代码平台的出现为解决这一问题提供了新的思路。本文将探讨低代码平台中如何实现统一认证与单点登录&#xff08;SSO&#xff09…

ElementPlusError: [ElForm] unexpected width NaN 解决方法

我自己在使用 Vue 和 ElementPlus 开发项目时&#xff0c;当切换到某些页面时&#xff0c;控制台会出现如下错误&#xff1a; 经过分析&#xff0c;问题原因如下&#xff1a; • el-form 组件设置了 label-width“auto”&#xff0c;并且该组件处于隐藏状态&#xff08;例如被…

超全分享!这些好用的人力系统不允许还有人不知道!

今天将盘点六款值得推荐的人力系统&#xff0c;为企业选型提供参考&#xff01; 人力系统就如同企业人力资源管理的智慧中枢&#xff0c;能把企业的人才管理得科学高效。 对于企业来说&#xff0c;如果没有一款好用的人力系统&#xff0c;就像航海者失去了罗盘。有了它首先能精…

18:HAL--DMA

一&#xff1a;DMA DMA的基本定义&#xff1a; DMA&#xff0c;全称Direct Memory Access&#xff0c;即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间&#xff0c;提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个…

猫咪浮毛引起呼吸问题?希喂、小米、有哈宠物空气净化器性能对比

相信每个铲屎官都会碰到猫咪掉毛的问题&#xff0c;掉落堆积的猫毛除了带来的清扫负担&#xff0c;还存在着极大的健康隐患。毛发主要分为两种&#xff0c;大颗粒的猫毛可以被我们肉眼所看见&#xff0c;通常会沉在地面上、床上。这类猫毛我们可以用粘毛器、吸尘器等工具进行清…

反向沙箱-安全上网解决方案

随着信息化的发展&#xff0c;企业日常办公越来越依赖互联网。终端以及普通PC终端在访问互联网过程中&#xff0c;会遇到各种各样不容忽视的风险&#xff0c;例如员工主动故意的数据泄漏&#xff0c;后台应用程序偷偷向外部发信息&#xff0c;木马间谍软件的外联&#xff0c;以…

录屏时摄像头无法识别?如何录屏时打开摄像头,解决方案及录屏软件推荐

在数字时代&#xff0c;无论是游戏玩家、在线教育者还是企业培训师&#xff0c;录屏软件都已成为日常工作和娱乐中不可或缺的工具。但有时候想录制人物摄像头画面的时候&#xff0c;当录屏软件无法识别到摄像头时&#xff0c;这无疑会给用户带来不小的困扰。本文将提供一系列解…