C++引用与指针问题以及效率

2024年C C++最全BFS经典例题合集_bfs例题,2024年最新字节跳动+京东+美团+腾讯面试总结 【代码】2024年C C++最全BFS经典例题合集_bfs例题,2024年最新字节跳动+京东+美团+腾讯面试总结。 阅读详情

问题

今天刷leetcode的时候做到一道构造二叉树类型的题,发现算法写的没问题但是执行的返回总是为空,函数没有改变我传入的指针参数。原因是我传入的指针,并不是通过这个指针去修改其指向的内容,而是修改了这个指针的指向!然而我的参数传入方式是传值,因此传入的其实是指针的副本,而后函数中改变了这个副本的指向,但是最后退出函数的时候,调用函数中的指针其实是没有改变的。因此只能对指针也进行引用传递:

TreeNode *&root

引用

引用是在C++中引入的,原始的C是只能通过传地址来实现的; 我们通常的参数传入都是传值方法,是被调用函数使用调用程序值的拷贝!
引用其实是对变量创建一个别名:

int rats;
int & rodents = rats //将rodents作为rats的别名

要注意区别引用&和地址运算符&!
引用和指针的区别我认为和Linux中硬链接和软链接的区别很类似,而且引用和指针的一个重要区别是,声明引用的时候必须将其初始化,而指针不需要!

在上面问题中讨论到的,若是指针的传值传入,则是拷贝了原指针的值获得一个副本,尽管在函数内部可以对这个副本指针的指向进行改变,但是无法改变原指针的指向!除非传入的是这个指针的地址!

效率

传值需要对参数进行拷贝,相对来是耗时一些,在C++中使用传引用有利于提高效率

关于 C++ 参数使用指针还是引用的总结 这本书的第一条就是区分指针和引用。它们两者之间的最大区别是引用必须指向某个对象而 指针可以是NULL,此外引用一旦指定不能更改而指针可以。这两个区别点导致引用有更加安全和高效的特性,但是指针却有无可比拟的灵活性。大部分 人出于安全性的考虑会推荐使用引用,这其实也是它设计的主要目的,但是如果你想要灵活 的设计,大部分时候你只能选用指针,比如设计模式种的大部分设计都是使用指针而不是使 用引用。 阅读详情

相关推荐

深入理解C++指针与引用的奥秘

本文深入探讨了C++中的指针与引用,包括指针的解引用、成员指针操作符、数组与指针的关系、指针算术、指针的安全性问题、以及引用的定义和使用。通过对代码示例的分析,展示了指针和引用在内存操作中的具体应用,并讨论了它们在实际编程中的优缺点。

weixin_33670640的博客 462

[c/c++] 使用函数指针会导致程序变慢

某些cpu和内存极端情况下,一个简单的函数指针调用可能会卡 数秒。

ykun089的博客 971

Fluent VOF造波从入门到放弃?手把手教你用k-w SST模型搞定波浪模拟

本文详细介绍了使用Fluent VOF和k-w SST模型进行波浪模拟的实战技巧,从参数设置到结果优化,帮助用户避开常见误区。通过工业项目验证的配置方案,提升波浪模拟的准确性和计算效率,特别适合处理多相流和复杂湍流场景。

weixin_27102543的博客 422

C++学习——引用、传值和传引用的效率对比、引用与指针

一、 引用 1.1 引用概念 引用(reference)是为变量起了另一个名字,而不是定义一个新变量。编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。其使用形式如下: 类型& 引用变量名(对象名) = 引用实体; eg: int ival = 1024; int &refVal = ival; // refVal 指向ival(是ival的另一个名字) int &refVal2; // 报错:引用...

weixin_44132627的博客 8128

从萤石云到GB28181:海康4G摄像机接入第三方平台的曲折之路

本文深入探讨了海康4G摄像机接入第三方平台时遇到的协议冲突问题,特别是GB28181与萤石云服务的互斥性。通过技术分析揭示了4G模块的定向流量限制和协议栈资源竞争等核心问题,并提供了有线接入测试和萤石云API二次开发等解决方案。最后总结了设备选型的关键参数和协议兼容性检查清单,为安防监控系统集成提供实用指导。

mango的博客 993

宇树G1双足机器人SLAM开发环境搭建实战指南

SLAM(同步定位与建图)是机器人自主导航的核心技术。在双足人形机器人平台上,由于运动模型复杂、机身晃动带来高频IMU噪声,SLAM开发对环境配置和依赖管理提出了更高要求。以宇树G1为例,系统阐述如何通过Ubuntu 20.04、ROS Noetic与Docker容器化方案构建可复现的SLAM开发环境。先介绍依赖分层管理与版本锁定原理,再深入catkin工作空间编译、传感器驱动集成、网络与多机通信配置等工程实践,最后提供常见问题排查与避坑指南。这套方法论不仅适用于G1,也可迁移至其他双足或轮式机器人平台,帮

weixin_32025789的博客 267

C++ 引用操作对程序效率的提高

有大量数据需要作为参数传递时,使用引用传递函数的参数可以提高程序执行效率

qq_45139003的博客 508

C++高效程序设计

C++高效程序设计作者:Joris Timmermans译者:Xu Leasun(2003.04.02)(本译文的翻译已获得原作者授权,本译文的版权归雪川原所有,转载请与雪川联系)(本译文首次发表于《程序员》杂志2003年1月刊,感谢《程序员》杂志)摘要不管是否愿意承认,每个人都希望程序的运行速度越快越好。每天人们都你追我赶,好像明天就是末日。而同时,公关部的那些家伙则不停的吼叫着,说他们

James Deng的专栏 3971

060、模型蒸馏:把扩散模型压进单步的魔法

《端侧文生图模型蒸馏实战:从32步到1步的优化之道》摘要:针对边缘设备部署难题,本文分享了扩散模型蒸馏的核心经验。通过重构损失函数(感知损失+对抗训练+KL散度)、优化采样轨迹截取策略和改造学生模型架构,成功将Stable Diffusion压缩至单步推理。关键发现包括:小批量训练更有效、标签平滑保障生成多样性、双模型策略平衡质量与速度。在Cortex-A53芯片上实现300ms内生成,内存占用控制在200MB以下。特别强调工业部署需权衡压缩率与稳定性,建议保留迭代模式开关以适配不同场景需求。

2601_95651806的博客 150

nvidia系列教程-AGX-Orin usb3.0接口调试

NVIDIA Jetson AGX Orin 是一款高性能的嵌入式计算平台,适用于 AI 推理、机器人、自动驾驶等应用场景。本文将介绍如何对 AGX Orin 平台上的 USB 3.0 接口进行调试,包括硬件检查、软件配置以及常见问题的排查。本文主要介绍在AGX-Orin平台开启两个usb3.0口的方法。通过以上步骤,您可以有效地调试和优化 NVIDIA Jetson AGX Orin 上的 USB 3.0 接口。

flypig has a dream! 1502

04【C++ 入门基础】引用

C++引用机制解析与使用指南 本文系统介绍了C++中引用的概念、特性及应用场景。引用是变量的别名,与实体共享内存空间,具有必须初始化、不可重绑定等特性,解决了指针的复杂性和安全性问题。主要应用包括:作为高效安全的输入/输出型参数,避免数据拷贝;作为函数返回值提升大对象返回效率。文章通过代码示例对比了传值与传引用的性能差异,并强调引用使用注意事项:不可返回临时变量、需遵守权限规则(只能缩小或平移权限)。引用机制显著提升了C++在大型项目中的开发效率和代码安全性。

poplar的博客 1066

C#上位机+YOLO入门:工业视觉检测最小demo(复制就能跑,附完整代码)

新手入门C#上位机+YOLO,最忌讳的是上来就追求“大而全”,结果卡在某个外围功能上,连核心逻辑都没搞懂。这个最小demo的目的就是让大家先掌握“图像预处理→模型推理→结果解析”的核心链路,后续再逐步添加工业场景的功能,这样学习效率会高很多。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 726

为什么 C++ 有指针了还要引用?

今天师弟问我,引用的底层也是指针实现的,内置类型指针传递和引用传递的汇编代码是一样的,那C++为什么还需要引入引用呢? 好吧,仔细想了下,这确实是个好问题。 引用传递,只是明面上,没有使用值传递,值传递本身是不可避免的。 编译器,暗地里通过指针(或者其他可以替代指针的数据类型)的值传递,替换了引用传递。 所以引用传递,实质上是地址传递,别名这东西只是概念,是一种抽象,别名是没法传递的。 别名,可不...

a3192048的博客 1万+

【100%通过率】2024华为OD机试真题E卷 C++语言 实现【流浪地球】

流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。 1) 初始状态下所有的发动机都是未启动状态; 2) 发动机起动的方式分为“手动启动”和“关联启动”两种方式; 3) 如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被“关联启动”; 4) 如果准备启动某个发动机时,它已经被启动了,则什么都不用做; 5) 发动机0与发动机N-1是相邻; 地球联合政府准备挑选某些发动机在某些时刻进行“手动启动”,当然最终所有的发动机都会被启动。 哪些发动机最晚被启动呢?

MISAYAONE的博客 4211

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

浅谈c++引用

一起来看看引用吧

qq_62852431的博客 1726

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++ 波澜壮阔 40 年:引用、内联函数与现代空指针,效率跃升三基石

C++入门:引用、内联函数、nullptr,三部分内容

晨非辰的学习记录博客~~ 4811

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【带你吃透C++】引用详解(引用和指针的区别)

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

平淡中造就不平凡 1454

【C++】C++的引用

不论采取何种定义,在使用空值的指针时,都不可避免的会遇到⼀些麻烦,本想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,调用了f(int x),因此与程序的初衷相悖。inline适⽤于频繁调用的短小函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略。这样的写法同样也是错误的,在运行第二条语句的时候由于类型不同,会进行隐式类型转换,而转换的时候同样也会将转换的结构保存在一个临时的对象之中,所以又会造成权限在引用时出现权限放大的问题。

HEBRE的博客 1097

C++ 中的指针和引用

指针大小与编译环境有关,而与机器无关,64位编译环境下是8个字节,32位下是4个字节。

qaaaaaaz的博客 413

C++的引用

引用

Zhlyyds108的博客 381

引用与指针:C++中的变量与内存操作方式比较

本篇博客将详细介绍C++中引用与指针的区别。引用和指针都是C++中常用的概念,它们在处理内存和变量之间的关系时有着不同的特性和用法。在本文中,我们将讨论引用和指针的声明与初始化、指向的灵活性、存储空间的占用、操作效率、安全性以及通用性。

weixin_47712251的博客 173

C++引用

一.定义在 C++ 中,引用是给已存在的变量起的一个别名。引用不是一个新的变量,它与被引用的变量共用同一块内存空间。二.声明引用的声明使用 & 符号,例如: int& ref = num;,这里 ref 就是变量 num 的引用。三、特点引用必须在创建时初始化,且一旦初始化,就不能再指向其他变量。引用在使用时和被引用的变量完全等价,对引用的操作就是对被引用变量的操作。四、和指针的区别1.引用在语法层面不开辟空间只是对变量取别名指针在语法层面开辟空间存放变量。

Starry_tsx的博客 692

浅谈指针与引用

一. 指针 1.什么是指针: 指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整型数据,代表了内存的编号,通过这个编号访问到对应的内存。 2.为什么使用指针: a、函数与函数之间是相互独立的,但是有些时候需要共享变量 传参是单向值传递 全局变量容易命名冲突 使用数组还需要传递长度 函数的命名空间是相互独立的,但是地址空间是同一个,所以指针可以解决这个问题 b、由于函数传参是值传递(内存拷贝),对于字节数较多的变量,值传递的效率较低,如果传递的是变量的地址,只需要传递4|8字节。 c、堆内

weixin_46810858的博客 1045

指针与引用的区别:指针与引用

引用是一种没有指针语法的指针.与指针一样,引用提供对对象的间接访问. --《c++ primer》p29 虽然引用也可以被用作一种指针,但是象对指针一样用一个对象的地址初始化一个引用却是错误的。 例如: int i=0; int &refi=i; //ok,refi指向一个i的引用 //int &refi=&i; 错误,不能用指针初始化引用 一旦引用已定义,它就不能再指向...

weixin_33675507的博客 100
上一篇: leetcode-DFS两道easy:平衡二叉树+图像渲染
下一篇: leetcode-有序链表转换二叉搜索树
alex_mist
博客等级 码龄9年 17粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值