C和C++的区别四【引用的使用以及注意事项】

⚡【C++要笑着学】(5) 引用:引用的概念 | 引用的三大特性 | 引用的应用 | 传值返回 | 传值和传址效率分析 | 引用和指针的区别 | 常引用 | 权限的放大和缩小 | 常引用做参数 本章将对C++的基础,引用部分的知识进行讲解。有些地方为了能够加深理解,我们会举几个比较有意思的栗子,在讲解的同时会适当的整活。 阅读详情

C和C++的区别四【引用的使用以及注意事项】

1.引用的原理与指针相比较而言:

例如:

        //(1)
	int a = 10;
	int &b = a;
	b = 20;
	//(2)
	int *p = &a;
	*p = 30;

(1)中b相当于是a的别名,对b进行改变其实就是对a进行改变;而在(2)中,指针p保存a的地址,当对a进行改变的时候,通过指针p指向a所在的内存,并对a进行改变(也就是我们说的解引用);


2.引用的书写方式?

步骤:

(1)先写成指针的形式;

(2)然后将指针 "*"改为“&”,并且把右边所取地址的“&”去除掉,这就是写引用的方法;

例如:

/*

int a = 10;	 
int *p = &a;  ----> int &p = a;

int array[10] = {0};
int (*array)[10] = &array; -----> int (&array)[10] = array;
//所以说在函数的参数传递方式中,引用比指针要安全的多,引用是数组的整个内存空间

*/

3.引用变量需要开辟内存吗?

例如:代码如下:

int main()
{
	int a = 10;
	int &b = a;
	b = 20;
	int *p = &a;
	*p = 30;
	cout<<"&a="<<&a<<endl;
	cout<<"&b="<<&b<<endl;
	cout<<"p"<<p<<endl;
}

运行结果:


通过上述的运行结果看出来:a的地址,和b的地址是一样的,而我们之前说过引用变量b是变量a的别名,当我们访问b的时候其实访问的是存储a的数据地址,所以说也就是我们在访问b的时候,它会自己【解引用】到存储a的地址;那么引用到底占不占内存呢?

上述代码的汇编如下:


上图中,对于b来说:先是将a的地址放入寄存器eax中,再将eax中得值放入b的地址中;

             对于p来说,先是将a的地址放入寄存器eax中,再将eax中得值放入p的地址中;

所以可以看出,引用变量b的底层实现也是一个指针,是需要开辟内存的;所以在定义引用变量的时候必须初始化而且所要引用的变量要能取地址。

4.引用变量初始化后则不能被改变,但是引用具有传递性,即可以传递;

例如代码:

int main()
{
	int a = 10;
	int &b = a;
	int &c = b;
	cout<<"&a="<<&a<<endl;
	cout<<"&b="<<&b<<endl;
	cout<<"&c="<<&c<<endl;
}

结果:


Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(12) C++ 引用、常引用、引用和指针的区别、引用的作用、常引用的作用 引用的知识点好多,学崩了。 文章目录引用引用和指针的区别引用的作用常应用 引用 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名;   int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名 说明: (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 注意事项: (1)声明引用时,必须同时对其进行初始化。 (2)引用声明完毕后,相当于目标变量名有两个名 阅读详情

相关推荐

Altium AD20的PCB板框绘制、定义板子形状、重新设置原点、放置尺寸标注

AD20的板框绘制与以前的版本不同,以前板框是在KeepOut层,而在AD20中没有这个层,绘制板框需要到机械层Mechanical1。 板框大小评估 首先进行板框大小评估。 工具 - 器件摆放 - 在矩形区域摆放。 之后通过鼠标框选矩形区域,元件会自动按照框选的范围进行摆放。这个操作可以重复多次,最后大致得出需要的板框尺寸。确定好后右键。 板框绘制,重新定义板子形状 点击下方的 Mechanical1,切换到机械层。放置线条,根据元件摆放来绘制PCB大致的形状,将元件完全包裹。

Mark_md的博客 10万+

引用的使用及注意事项

注释挺全的,看注释吧 #include<iostream> using namespace std; void fun(int&, int&); int main() { int a = 3,c=4; int& b = a; cout << b << endl; //1.int& b = c;错误; 声明一个引用后不可以作为另一个引用 //2.声明引用必须同时初始化. //3.int &n=a[0]不能建立数组引用.

weixin_45671199的博客 205

ENSP之配置静态路由

ENSP之配置静态路由 两台路由器两台PC 拓扑图如下: 配置AR1线路上的两条IP地址 配置AR2线路上的两条IP地址 3.AR2上 配置静态IP 路由 AR1上 配置静态IP 路由 设置两台PC 的IP地址 网关 PC1 PC2 全部配置好了之后 现在测试PC1是否ping 得通PC2 在命令行输入 成功的话如下图 ...

浪友与泪的博客 3545

c++引用注意事项

#include<iostream> using namespace std; //引用函数不能返回局部变量,否则使用一次后内存会删除 //引用可以变成左值用来使用 int& func() { static int a = 20; return a; } void main() { int& ref = func(); cout << ref << endl; func() = 100; cout << ref <&l.

m0_48368014的博客 253

保姆级教程:用再生龙Clonezilla Live给Ubuntu系统做全盘备份与恢复(含BIOS设置避坑)

本文提供了一份详细的Clonezilla Live教程,指导Ubuntu用户如何轻松完成全盘备份与恢复。从启动盘制作、BIOS设置避坑到备份参数解析和恢复操作,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效保护系统数据。

weixin_42116058的博客 641

Cocos Creator 3D音频定位实战:从原理到沉浸感实现

3D音频定位是游戏开发中实现沉浸感的关键技术,其核心原理基于HRTF(头部相关传输函数)模型,模拟声音在空间中的传播与双耳感知差异。这项技术通过赋予声音空间坐标、距离衰减和方向属性,将音频从背景元素提升为可交互的环境线索,极大增强了虚拟世界的真实感与玩家的空间认知。在工程实践中,开发者需要深入理解声源、听者、衰减曲线与多普勒效应等基础概念,并合理运用音频池、优先级管理与动态混音等技术手段来平衡效果与性能。对于Cocos Creator开发者而言,无论是使用引擎原生的AudioSource组件构建轻量级方案,

weixin_30972263的博客 293

C和C++的区别(引用&)

一、关于inline函数 内联函数:在 编译期 的时候,内联函数的代码会在 调用的地方展开,没有函数栈帧的开辟 inline函数 编译期间在代码调用的地方展开,有逻辑性的尽心那个替换 能够调试,在debug版本inline函数和普通的函数表现一致 只有在release版本才会真正在调用点展开 因为需要在编译期间展开,而编译期间针对的是单文件 所以,inline函数的作用域只在本文件,debug版本 生成local符号 有类型检测,安全 宏函数 预编译期展开在代码调用点,进行简单的文字替换, 不能调试

长期更新自学笔记 1338

蓝牙攻防实战指南:低功耗蓝牙

Bluetooth Low Energy(也称Bluetooth Smart)是经典蓝牙(Bluetooth Classic)的演进版本,设计目标是实现极低功耗,适用于无需频繁更换电池的设备,如智能手环、健康监测器、蓝牙标签等。Bluetooth Low Energy 是一项极具前景的无线通信技术,它以极低的功耗实现了短距离高效通信,广泛应用于智能设备和物联网领域。然而,其简化的协议结构和配对机制也带来了不小的安全挑战。

idlecloud0105的博客 683

什么是引用,使用引用应该注意的问题

答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只

darkbus111的专栏 3309

后摄模块辐射超标整改

某行车记录仪在EMI测试中出现辐射超标问题,通过模块剥离法定位到后摄模块的Ethernet数据线为噪声源。深入检查发现TYPE-C延长线屏蔽层未有效接地,形成辐射泄漏通道。整改措施包括加强屏蔽层360°接地、使用导电布改善连接处屏蔽等,最终使辐射降至EN55032 Class B限值以内。案例揭示了高速信号延长线中屏蔽连续性的重要性,建议设计阶段就重视连接器屏蔽设计和共模干扰抑制。

硬核科技 255

C#串口通信从入门到精通(5)——打开、关闭串口

本文详细介绍如何打开串口

qq_34059233的博客 6783

关于引用的几种应用类型和注意事项

引用的几种应用类型 一、对变量的独立引用 解释即为一种对变量的别名 本质与变量本身相同 注意事项: 引用后不可再和其他变量建立联系,即不能再作为其他变量的引用如: int &u=i; int s; int &u=s; 但是可以int &u=i; int s; int &s=u;即让其他变量作为它的引用。 二、引用作为函数参数 作为函数参数时声明为引用的参数可...

weixin_45649612的博客 365

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【C++初阶】extern C,引用,内联函数,auto和指针空值

前言:紧跟上一篇文章,补完C++入门初期的零散知识点,本章知识点包括extern “C”、引用、内联函数、auto等内容! 文章目录1.extern “C”2.引用2.1 引用的概念2.2 引用的特性2.3 常引用2.4 引用的使用场景(1)作参数(2)作返回值2.5 那么引用与指针有哪些区别?3.内联函数3.1 概念3.2 三个特性4.auto关键字4.1 概念4.2 auto的使用细则4.2.1 auto与指针和引用结合起来使用4.2.2 在同一行定义多个变量4.3 auto不能推导的场景4.3.1

林慢慢的博客 1943

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

[C++] C++引用如何使用,和指针有何区别

对于C++引用的详细介绍,如何使用,语法规则,和指针有和区别, 带图

C/C++学习之旅 971

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C和C++区别

C和C++的区别 首先我们先简单介绍一下C语言和C++: ①:C语言的介绍 C语言是一个结构化语言,它的重点在于算法和数据结构。C语言的设计首要考虑的是如果通过一个过程对输入进行运算处理得到输出。 C语言可以做任何用处,但最大的用处还是写写操作系统和编译器之类的。 C语言是非常有效率的,作为一个底层编译语言,可以通过指针直接去对内存进行管理,另外很多语言都是用C语言来设计的,如java,python。 ②:C++的介绍 C++是对C语言的继承与发展,C++功能很强大,可以应用开发大型应用软件。即可以面

weixin_45009662的博客 5862

函数重载和引用【C++】

函数重载:重载函数是函数的一种特殊情况。为方便使用,C++允许在同一作用域中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指1.参数的个数 2.类型 3.顺序)必须至少有一个不同根据这些同名函数的参数表的不同,达成传入参数类型不同,调用的函数不同的效果引用是给已存在变量取一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。即使用一个变量的引用就是使用该变量,修改它的引用也是修改变量自己例。

2301_80058734的博客 2041

【C++掌中宝】走进C++引用的世界:从基础到应用

C++引用相关知识分享

2301_80191662的博客 2052

C语言的指针与C++引用的区别

在C语言里我们经常使用“指针”,但是在C++里我们用“引用”替换了“指针”的部分功能,他们俩有什么区别呢?

pai_2526的博客 1042

C++缺省参数、缺省参数的概念、缺省参数的分类、函数重载、函数重载的概念、C++支持函数重载的原理、引用、引用概念、引用的特性、常引用、引用的使用场景、传值和传引用效率的比较、引用和指针的区别等的介绍

C++缺省参数、缺省参数的概念、缺省参数的分类、函数重载、函数重载的概念、C++支持函数重载的原理、引用、引用概念、引用的特性、常引用、引用的使用场景、传值和传引用效率的比较、引用和指针的区别等的介绍。C++缺省参数、缺省参数的概念、缺省参数的分类、函数重载、函数重载的概念、C++支持函数重载的原理、引用、引用概念、引用的特性、常引用、引用的使用场景、传值和传引用效率的比较、引用和指针的区别等的介绍。

Farewell_me的博客 1433

指针和引用的区别

一、C++中引用和指针的区别指针初始化的时候,可以指向一个地址,也可以为空。引用必须初始化为另一个变量. int ival = 1024; int *pi  = &ival; // a pointer int &rval = ival; // a reference二、估计很多人在编写C++程序都或多或少的会用到pointer 和 reference这两种东西,但是他们两者到底有什么样

风生水起 6821

C和C++的区别

C和C++的区别 首先我们先简单介绍一下C语言和C++: ①:C语言的介绍 C语言是一个结构化语言,它的重点在于算法和数据结构。C语言的设计首要考虑的是如果通过一个过程对输入进行运算处理得到输出。 C语言可以做任何用处,但最大的用处还是写写操作系统和编译器之类的。 C语言是非常有效率的,作为一个底层编译语言,可以通过指针直接去对内存进行管理,另外很多语言都是用C语言来设计的,如java,...

IT_Quanwudi的博客 1143

C++ 引用与引用作为函数的参数

对一个数据建立一个“引用”,他的作用是为一个变量起一个别名。这是C++对C语言的一个重要补充。 如何建立一个引用 int a = 5; int &b = a; cout<<a<<endl; cout<<b<<endl; cout<<&a<<endl; cou...

朋朋の优快云博客 6009

【C++对于C语言的扩充】函数重载、引用以及内联函数

大家好啊!好久没更文了,课多还有就是备战前几天考完的蓝桥杯,好了不多bb,接着带大家从C语言过度到C++!!!

m0_75108739的博客 1763

C++引用使用

实际上,我们从反汇编的层面看,引用底层也是采用指针的形式实现的,并且也需要开辟空间,但我们从语法上认为引用不需要额外开辟空间。​ C++中的引用就是给变量取别名,语法上说编译器不会为引用另外开辟空间,引用与原变量指向同一空间。​ 也可以给别名再取别名,指向的还是原来的那个变量,可以看出地址都是一样的。C++中指针与引用相辅相成,功能有重叠性,但各有自己的特点,互相不可替代。

ZhuXiaoTianYa的博客 1188

C++引用详解:使用场景、注意事项与指针区别

引用是C++中非常重要的特性,它为我们提供了一种更安全、更直观的变量别名机制。// d的类型推导为double。// c的类型推导为int。// 错误:a是只读的,b是可读写的。1. 引用做参数:基本任何场景都可以用引用传参,特别是输出型参数和大对象传参。// 这是赋值操作,不是改变引用,c仍然是a的别名。对于大对象或深拷贝类对象,使用引用,直接操作原对象,可以显著提高效率。

2401_89437658的博客 510
上一篇: C和C++的区别三【const的修饰】
下一篇: 学习Go语言第一周的感受
IT_model
博客等级 码龄9年 61粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值