C++第5课:引用的本质分析

C++引用(变量引用、数组引用与数组指针、引用本质-指针常量、常量引用) 文章目录1 引用的基本用法2 引用注意事项3 引用做函数参数4 引用做函数返回值5 引用的本质6 常量引用 1 引用的基本用法 作用:为变量起别名。 语法:数据类型 &别名 = 原名; 示例: int main() { int a = 5; int &b = a; //引用:为变量起别名 cout << "a = " << a << endl; //5 cout << "b = " << b << endl; 阅读详情

本文学习自 狄泰软件学院 唐佐林老师的 C++课程


实验1 :可以使用变量和常量初始化 const引用变量, const引用让变量拥有只读属性

注意1 :不可以直接用字面常量初始化 引用变量,但是可以初始化 const引用变量
注意2 : const引用让变量拥有只读属性,如

int a = 4;
const int& b = a;

此时只是变量b具有只读属性,变量a属性不变。

实验2 :引用的本质,是一个指针常量
实验3 :引用的本质,是一个指针常量
实验4:引用的使用-千万不要返回局部变量发引用

注意:引用就是变量本身,内部本质实现是一个指针常量,C++中引入引用的目的是代替指针。


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实验1 :可以使用变量和常量初始化 const引用变量, const引用让变量拥有只读属性
注意 :不可以直接用字面常量初始化 引用变量,但是可以初始化 const引用变量

#include <stdio.h>

void Example()
{
    printf("Example:\n");
    
    int a = 4;
    const int& b = a;
    int* p = (int*)&b;
    
    //b = 5;//打开会出错,不能对 只读引用b进行赋值
    
    *p = 5;
    
    printf("a = %d\n", a);
    printf("b = %d\n", b);
}

void Demo()
{
    printf("Demo:\n");
    //此时c代表一个只读变量,编译器会为它跟配4个字节空间,并且c作为该空间的别名,并且对该空间用1进行初始化
    const int& c = 1;
    int* p = (int*)&c;
    
    //c = 5;//不可以打开,c 是一个只读变量
    
    *p = 5;
    
    printf("c = %d\n", c);
}

int main(int argc, char *argv[])
{
    Example();
    
    printf("\n");
    
    Demo();

    return 0;
}

在这里插入图片描述

结论;如果说我们想要使一个已经存在的变量拥有只读属性,变成一个只读变量,在C++中只需要定义一个const引用就可以了。

在这里插入图片描述

实验2 :引用的本质,是一个指针常量

#include <stdio.h>

struct TRef
{
    char& r;
};

int main(int argc, char *argv[])
{ 
    char c = 'c';
    char& rc = c;
    TRef ref = { c };
    
    //1 ,引用就是变量本身,求 char & 的大小也就是求它对应的变量的大小。
    printf("sizeof(char&) = %d\n", sizeof(char&));

	//  sizeof(rc) == sizeof(c) = 1
    printf("sizeof(rc) = %d\n", sizeof(rc));
    
    //4 ???  指针大小为4
    printf("sizeof(TRef) = %d\n", sizeof(TRef));

	//1
    printf("sizeof(ref.r) = %d\n", sizeof(ref.r));

    return 0;
}

在这里插入图片描述

在这里插入图片描述

实验3 :引用的本质,是一个指针常量

#include <stdio.h>

struct TRef
{
    char* before; //指针 4
    char& ref; //引用的本质是指针常量 char* const ref   大小为4
    char* after;
};

int main(int argc, char* argv[])
{
    char a = 'a';
    char& b = a;
    char c = 'c';

    TRef r = {&a, b, &c};

    printf("sizeof(r) = %d\n", sizeof(r));
    printf("sizeof(r.before) = %d\n", sizeof(r.before));
    printf("sizeof(r.after) = %d\n", sizeof(r.after));
    printf("&r.before = %p\n", &r.before); //应用的本质是指针常量 ,指针的地址
    printf("&r.after = %p\n", &r.after); //应用的本质是指针常量 ,指针的地址

    return 0;
}

在这里插入图片描述

在这里插入图片描述
实验4:引用的使用-千万不要返回局部变量发引用

#include <stdio.h>

//注意 引用不要返局部变量的引用
int& demo() //int* const 返回值是指针 即地址
{
    int d = 0;
    
    printf("demo: d = %d\n", d);
    
    return d; // return &d
}

int& func() //int* const 返回值是指针 即地址
{
	//静态的局部变量的存储空间是全局存储区,所以该变量不会因为函数调用的结束而被摧毁
    static int s = 0;
    printf("func: s = %d\n", s);
    
    return s;// return &s
}

int main(int argc, char* argv[])
{
    int& rd = demo();
    int& rs = func();
    
    printf("\n");
    printf("main: rd = %d\n", rd); //野指针
    printf("main: rs = %d\n", rs);
    printf("\n");
    
    rd = 10;
    rs = 11;
    
    demo();
    func();
    
    printf("\n");
    printf("main: rd = %d\n", rd);
    printf("main: rs = %d\n", rs);
    printf("\n");
    
    return 0;
}

在这里插入图片描述

在这里插入图片描述

Nvivo12新手避坑指南:从安装到编码的完整流程(附实战案例) 本文为Nvivo12新手提供了从软件安装、初始设置到数据导入和编码分析的完整避坑指南。通过一个“校园欺凌现象的学生访谈研究”实战案例,详细拆解了处理中文文本、创建项目结构、执行手动编码及高级查询等关键步骤,帮助研究者避开常见错误,快速上手并高效完成质性数据分析。 阅读详情

相关推荐

鸿蒙之HML语法参考

HML(HarmonyOS Markup Language)是一套类HTML的标记语言,通过组件,事件构建出页面的内容。页面具备数据绑定、事件绑定、条件渲染和逻辑控制等高级能力。

2401_82772199的博客 1649

【C++】C & C++引用(三)

1、引用是什么 在c++中包含两种引用,分别是“右值引用”与“左值引用”,而我们常说的“引用(reference)”确切的说是指的“左值引用”。那么什么是引用?引用就是为对象起了另外一个名字,引用类型引用另外-一种类型,我们可以理解为引用即是别名、绰号。通常写成**&d**的形式。 2、引用的定义 首先要明白引用 != 复制、拷贝,它是与初始值绑定到一起。可以这样理解引用就是给一个对象取别......

qq_32643313的博客 424

智能车竞赛轮腿穿越组:GPS+IMU导航绕桩实战技巧(附避坑指南)

本文详细介绍了智能车竞赛轮腿穿越组中GPS+IMU导航绕桩的实战技巧,包括硬件选型、传感器标定、路径规划及多传感器数据融合策略。通过实际案例和避坑指南,帮助参赛队伍提升导航精度和稳定性,避免常见错误。特别强调IMU安装位置和标定对导航系统的重要性。

gin88的博客 584

C++ 引用的本质

引用是 C++ 引入的重要特性,它使原来在 C 中必须用指针实现的功能有了另一种实现的选择,在书写形式上更为简洁。那么引用的本质是什么,它与指针又有什么关系呢?

Doublelv 的博客专栏。 1万+

ffmpeg中av_read_frame阻塞的原因与解决方案

最近用到ffmpeg,想要av_read_frame立即返回,但是看网上的博客,都没有详细的解说,那就自己看源码。 两种方法: 设置回调打断函数和设置超时 超时,但是如果只设置该参数,依然会在av_read_frame中阻塞, av_dict_set(&inputDic, "stimeout", "2*1000*1000", 0); // milliseconds //打断回调 m_avformatCtx->interrupt_callback.callback = interru

weixin_43360707的博客 1万+

MTK MT6833平台屏幕与TP驱动移植实战:从FAE伪代码到内核模块集成

本文详细介绍了在MTK MT6833平台上进行屏幕与TP驱动移植的完整实战流程。文章从解析供应商提供的初始化伪代码入手,逐步拆解了在LK阶段点亮屏幕、在内核层集成Panel驱动以支持休眠唤醒,以及移植并调试sitronix_ts触摸驱动的核心步骤与关键技巧,为嵌入式开发人员提供了从零到一集成新硬件的清晰指南。

rnn9storyteller的博客 441

【Cpp】引用的本质

一、什么是引用 引用是C++中的一个新的语言特性,从表面来说,引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明如下: 类型标识符 &引用名 = 目标变量名; 这里面的&不是位运算、不是取地址,而是一个引用的标识符,可以认为是一个“类型标识符 &”类型,类型标识符是指目标变量的类型。如: int a = 10; int &b = ...

baymaxly的博客 843

ArcGIS 10.2.2自带Python 2.7.5环境配置全攻略:从pip安装到gdal、arcpy调用

本文详细指导如何在ArcGIS 10.2.2自带的Python 2.7.5环境中进行高效配置。核心内容包括安装pip包管理器、部署gdal等关键地理数据处理库,并确保arcpy模块的无缝调用。通过解决路径配置与PyCharm集成问题,帮助用户在此经典环境中构建稳定、兼容的地理信息自动化工作流,有效连接ArcGIS桌面功能与Python脚本编程。

moon9的博客 768

C++ 引用的本质是什么?

结论: ①C++中的引用本质上是 一种被限制的指针(类似于线性表和栈,栈是被限制的线性表,底层实现相同,只不过逻辑上的用法不同而已)。 ②由于引用是被限制的指针,所以引用是占据内存的。 ③在使用高级语言的层面上,是没有提供访问引用的方法的。并且引用创建时必需初始化,创建后还不能修改。 下面是找到的相关资料,来证明以上结论。 ************************************************************************************

木牛的博客 3368

(计算机组成原理)第二章数据的表示和运算-第二节:数字电路基础知识

本文介绍了计算机组成原理中的逻辑门电路、多路选择器和三态门。逻辑门电路包括基本逻辑运算(与、或、非)和复合逻辑运算(与非、或非、异或、同或),这些运算通过门电路实现,并满足分配律和结合律。多路选择器(MUX)用于从多个输入信号中选择一个输出,广泛应用于数据选择、资源共享和逻辑函数实现等场景。三态门则具有三种输出状态(高电平、低电平、高阻态),常用于总线控制和信号隔离。这些元件在数字电路设计和计算机系统中具有重要作用。

快乐江湖的博客 2474

【四足机器人项目实战】cheetah 3/mini运动控制工程解读(附C++代码)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、主程序入口1.代码流程2.终端设置信息提示二、用MiniCheetahHardwareBridge类构造一个hw的对象并初初始化1.2.3.4.三、运行硬件桥驱动【MiniCheetahHardwareBridge】1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对cheetah3/m

qq_35635374的博客 2617

【重学C++】【引用】一文看懂引用的本质与右值引用存在的意义

本文我们深入理解了引用的本质,以及学习了左值和右值的概念,还有右值引用存在的意义。对于左值和右值,我认为不需要去特别的区分,这是编译器的工作。我们更多需要做的,是

同学小张的博客 1523

claude code desktop中出现Doesn‘t look like an Anthropic model - expected a gateway model route 解决方案

本文主要介绍了claude code desktop中出现Doesn’t look like an Anthropic model - expected a gateway model route referencing an Anthropic model和Server is busy. Retrying的解决方案,希望能对使用claude code desktop的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

第5课 引用的本质分析

1. 引用的意义 (1)引用作为变量别名而存在,因此在一些场合可以代替指针 (2)引用相对于指针来说,具有更好的可读性和实用性        2.特殊的引用:const引用 (1)在C++中可以声明const引用 (2)constType& name = var; (3)const引用让变量拥有只读属性      (4)当使用常量对const引用进行初始化时,C++编译器...

梦心之魂的博客 89

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++中引用的本质分析

引用是C++中心增加的内容,在C语言是没有引用这一种用法的。那什么是引用呢? 大家都知道,我们定义变量的时候,其实是将变量名和内存空间关联起来,变量名就是一段内存空间的别名。当我们使用引用的时候,例如int& a = b; 其实就相当于a是b的别名,也就是说a和b都是指向同一段存储空间的。那这么做有什么意义呢? 我们在C语言的时候,当要交换两个变量的值时, ...

bendanfly的博客 417

IMSL CNL 7.0.0 (x86-64)Crack

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

第5课 - 引用的本质分析

一、引用的意义 引用作为变量别名而存在,因此在一些场合可以代替指针; 引用相对于指针来说具有更好的可读性和实用性; 函数中的引用形参不需要 进行初始化。 如下图1所示,可以看用引用作为形参的函数在使用时会方便很多,因为不用像指针那样需要取变量地址。 ...

liqingjielihanjie的博客 295

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深入浅出的剖析C++中引用的本质

深入浅出的分析引用有的来龙去脉,进而深入汇编语言探索引用的本质 目录 1、变量名的回顾 2、引用的本质 3、特殊的引用 - const引用 4、再谈引用的本质 5、深入汇编分析 6、指针变量的引用 7、其他注意事项 8、引用与函数 9、引用的意义 1、变量名的回顾 变量是一段连续存储空间的别名 程序中通过变量来申请并命名存储空间 通过变量的名字可以使用存储空间 问题:一段连续的存储空间只能有一个别名吗? 2、引用的本质 1、C++中做了一个升级,于是引用就出来了。引用可以看

木牛的博客 701

【C++】5.引用的本质分析

引用的意义 引用作为变量的别名而存在,因此在一些场合中可以代替指针 引用相对于指针来说更具有更好的可读性和实用性 swap 函数的对比 // 指针版本 void swap(int *a, int *b) { int t = *a; *a = *b; *b = t } // 引用版本(注意:函数中的引用行参不需要进行初始化!!!) void swap(int&...

zhabin0607的博客 188

【C++】C++ 引用详解 ① ( 变量的本质 - 引入 “ 引用 “ 概念 | 引用语法简介 | 引用做函数参数 | 复杂类型引用做函数参数 )

一、变量的本质 - 引入 " 引用 " 概念 1、变量的本质 - 内存别名 2、引入 " 引用 " 概念 - 已定义变量的内存别名 3、" 引用 " 的优点 二、引用语法简介 1、语法说明 2、代码示例 - 引用的定义和使用 三、引用做函数参数 1、普通引用必须初始化 - 函数参数除外 四、复杂类型引用做函数参数 1、复杂类型参数的三种传递方式 I 、传递结构体对象本身 II 、传递结构体指针 III 、传递结构体引用 2、代码示例 - 使用三种传递方式传递参数

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 5729

C++引用本质

代码运行环境:Windows7 32bits+VS2017+Win32。 引用是C++引入的重要机制,它使原来在C中必须用指针实现的功能有了另一种实现的选择,在书写形式上更为简洁。那么引用的本质是什么,它与指针又有什么关系呢? 1.引用的底层实现方式 引用被称为变量的别名,它不能脱离被引用对象独立存在,这是在高级语言层面的概念和理解,并未揭示引用的实现方式。常见错误说法是“引用“自身不是一个变量,甚至编译器可以不为引用分配空间。 实际上,引用本身是一个变量,只不过这个变量的定义和使用与普通变量有显著的不同。

qq_46359697的博客 496

第5课 引用的本质分析

引用作为变量别名而存在,因此在一些场合可以代替指针 引用相对于指针来说具有更好的可读性和实用性 swap函数的实现对比如下: 注意:   函数中的引用形参不需要进行初始化。 示例程序如下: 形参没有初始化,而是在第15行调用的时候对引用形参进行初始化。 const引用: 当使用常量对const引用进行初始化时,C++编译器会为常量值分配空间...

diaozhiwa5526的博客 113

C++ 引用本质

C++引用及其本质在C++中,引用是一项强大而灵活的特性,允许程序员通过引用访问和修改变量的值。本文将深入探讨C++引用的本质、用法、优势以及与指针的比较等方面。引用是C++中强大而灵活的特性,提供了一种直接而高效的方法来操作变量。通过引用,我们可以避免不必要的拷贝,简化代码结构,提高程序的效率。然而,在使用引用时需要注意生命周期和作用域,确保引用始终指向有效的对象。在适当的场景和使用情境下,引用是C++中不可或缺的一部分。

wuyiyu_的博客 549

C++学习笔记 第5课 引用的本质分析

文章目录1.引用的意义2. 特殊的引用2.1 const引用2.2 特殊的引用3. 引用是否有存储空间4. 引用的本质5. 引用的意义 1.引用的意义 引用作为变量名存在,在一些场合可以代替指针 引用相对于指针有更好的可读性和实用性 比如下面的swap函数进行对比 void swap(int& a,int& b) { int t = a; a = b; b = t; } void swap(int* a,int* b) { int t = a; *a = *b; *b =

weixin_43824344的博客 169
上一篇: C++第4课:布尔类型+三目运算+引用
下一篇: C++第6课--内联函数分析
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值