C++中引用与指针的区别

浅析C++中引用与指针的区别 引用和指针的概念及区别1.引用及指针概念指针概念引用概念2.引用与指针的区别 1.引用及指针概念 如果熟悉指针和引用的使用,就会感觉到指针和引用在很多场景使用起来还是有很大的相似性的,尽管它们在概念上是俩个完全不同的东西。 那么这二者之间到底具有怎样的相似性以及又有怎样的区别呢? 在谈这个话题之前我们先简单回顾一下指针和引用的概念: 指针概念 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的 阅读详情

      不好意思各位,由于接朋友及同往新公司的路上耽搁了几天,实在抱歉,现在刚到公司与老总会晤,周一正式上班。现在坐了N天火车,现在也累也困,为了遵守前边许下的承诺,我又不得不马不停蹄的发篇学习文章,如有不到之处,欢迎大家补充下!好了,闲话少说,开干!

        C++中的引用跟指针,其实在某些情况下,实现的功能是一样的。那为什么有些人喜欢引用,而不喜欢指针呢?其实原因很简单,就 像现在许多的教科书或者相关技术文档上说,指针可以扎针孔,也可以砸地洞,说白了就是不好控制而已。其实这种说法是片面的,当你深刻了解了指针,懂得运用指针去灵活解决问题,我想这方面的担忧是多余的,这是庸人找的借口而已!那究竟有什么区别或者有什么异曲同工之妙呢?别着急,哥们马上开说!

         在说明之前呢,我觉得大家有必要学习或者重温下这两个概念:

         一、引用

         何为引用呢?其实概念很简单,就是一个变量的别名,操作这个别名,如同操作原对象(变量),实现的效果是一样的!举个简单又能说明问题的例子,就像一个人的 小名一样。他既可以叫张强,亦可以称呼其小强。

         那如何声明引用呢?举个例子:

         int a= 30;

          int &b = a;   // "&" 这个符号在这里的意思就是取一个变量引用的意思,起个变量的别名。

         ▲雷区:

          引用的声明必须同时被初始化,且引用一旦被初始化,则不可再次更改指向。<一夫一妻制,别妄想着享受夜夜睡新娘了!O(∩_∩)O ~~ 开玩笑!>记得上学那会,有同学会问,引用是不是仅仅作用于变量上,对象不可以被引用吗?答案是肯定的,是可以的。

         int &c;

         c = a;//这样的语法是错误的。

       二、指针

        何为指针呢?概念也很简单,指针是一个指向变量或者对象的内存地址的地址值。指针指向可以随时更改,前提该指针不是野指针!如果你还有些茫然或者理解不了,请参阅相关技术书籍大哥!

         声明指针可以一开始不用初始化,但是你如果不想惹不必要的麻烦的话,阿舰恳请您初始化一下吧,又累不死你!例如,下边有三种初始化的方法:

         (1)   int *p = NULL;  

         (2)   int *p;

                 p = NULL;

         (3)   int a = 20;

                int *p = &a;

        不仅仅是指针,建议您需要初始化,当您创建变量或者对象的时候,您最好也要初始化,这是一种编程规范。可以有效避免不必要的麻烦!

         ▲雷区:

         注意野指针(也有人称之为迷途指针,指的一回事!)。

        int *p = new int;
         *p = 20;
         delete p;
         *p = 30;

         这里的这个指针就是所谓的野指针了。依据代码,给出定义:如果原指针被delete掉后,你还用原来那个指针,那么你当前使用的指针就是野指针了。后果很严重,程序会崩溃!小心哈!

        那有人会问,如何避免这一糟糕事件的发生呢! 嘿嘿,很简单,当你删除之后,将其滞空,不再用它就欧了!

        规范代码:

        int *p = new int;
       *p = 20;
        delete p;
       p = NULL;

        这里其实大家还应该注意这样一个细节,当你删除该指针后(没将其滞空),其实该指针还是指向起初的内存地址,只不过该内存上的数据已经不是原来指向的数据了,往往编译器会将该位置重新分配给新的数据使用。最好是紧接着将其滞空为妙!少惹事吧大哥,对你有好处的!

         有关指针与数组,指针与函数,指针与对象,指针与类间的关系,由于时间关系,请您自行参阅相关技术书籍!人家比我也讲的好!

          三、 基础完了,言归正传,现在谈一下,引用与指针的区别:

          你现在已经知道了,引用实质上是被引用对象或者变量的别名而已,实际上也仅此而已,操作该对象,也等同于操作原对象本身一个性质。

           指针很随意,可以随时指向,前提不是野指针。

          那这两者到底有什么区别呢?

          (1) 指向限制:

                引用必须声明+初始一块干;(一夫一妻制)

                指针很灵活,可以随时更改指向,如果其不是野指针的话。(一夫多妻制)

          (2) 可否为NULL :

               不能有NULL引用,引用必须与合法的存储单元建立联系;

               指针可以为NULL。

        用途:

       有人肯定会好奇,学会引用或者学会指针,有什么用武之地吗?回答,那是必须的。不然谁会煞费苦心的设计没用的废物出来呢!

         能体现引用价值的地方,一般常用于两处,函数参数和参数的返回值。 对于作为函数参数来说,可以避免编译器对其内存拷贝,更重要的是,操作该引用如同在函数外部操作原对象一样的轻而易举,避免参数压栈,提高执行效率;作为函数的返回值来说,不得返回局部引用。

        对了,还需要说明一下,究竟什么时候使用引用的问题:

        1、传递的是一个大的对象

        2、想使用址传递外部变量,以使其更改

         3、拷贝构造函数、复制构造函数的参数

        4、返回 类数据成员(白话就是类对象)

 

        明晚发表常量、静态变量相关,敬请期待!

        好了,先聊到这吧,明晚继续~~~ 写这个还很耗时的~~~

 

                                                                                                                              2010年8月7日 下午

                                                                                                                                  阿舰         于日照

C++引用以及和指针的区别 阅读详情

相关推荐

[C++指针和引用 cpp] -> [C++中指针和引用的区别及使用场景详解]

在C++语言中,指针和引用是两个重要的概念,虽然它们都可以用来进行变量的传递和操作,但是在使用上还是有很多的差别。引用是一个已经存在的变量的别名,通过引用可以直接访问该变量,并且使用起来比指针更加方便。类成员的访问:指针和引用都可以用于访问类成员,不过在实际开发中,建议使用引用来访问类成员,因为引用更加直观。总之,指针和引用都是C++中非常重要的概念,掌握它们的区别和使用场景对于C++开发人员来说是非常必要的。定义形式不同:指针使用“*”符号来定义和操作,而引用使用“&”符号来定义和操作。

BitSlinger的博客 163

C++入门(下)——引用、内联函数、auto等

以上就是关于 C++ 入门基础的全部内容了,学习了 C++ 中的各种新特性,如 引用、内联、auto等等C++ 的修行之路才刚刚开始,我们已充满信心!如果你觉得本文写的还不错的话,期待留下一个小小的赞👍,你的支持是我分享的最大动力!如果本文有不足或错误的地方,随时欢迎指出,我会在第一时间改正本文部分引用于北海的这篇文章链接:https://blog.youkuaiyun.com/weixin_61437787/article/details/128848466。

Singularity_SY的博客 938

C++中引用参数与指针参数的区别与联系详解

在C++中,函数参数可以通过值传递、引用传递和指针传递。虽然指针传递在C和C++中都非常常见,但C++引入了引用类型,使得引用传递变得更加直接和易用。本文将详细介绍函数中引用参数和指针参数的区别与联系,并通过C++语言代码示例加以说明。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 770

[C/C++]c语言实现简单通讯录(动态内存)

设计目标:写一个通讯录,每个人的信息包括:1.名字,2.年龄,3.性别,4.电话,5.住址 //功能:1. 增加一个人的信息 2. 删除一个指定的联系人 3. 查找一个指定的联系人 ...

RMA515T的博客 2万+

C++指针和引用及区别

1.变量 首先最重要的,variable的定义,当你申明一个变量的时候,计算机会将指定的一块内存空间和变量名进行绑定;这个定义很简单,但其实很抽象,例如:int x = 5; 这是一句最简单的变量赋值语句了, 将5赋值于名字叫做x的内存空间,其本质是将值5赋值到一块内存空间,而这个内存空间名叫做x。 变量在内存中的操作其实是需要经过2个步骤的: 1.找出与变量名相对应的内存地址。 2.根据找到的地址,取出该地址对应的内存空间里面的值进行操作。 2.指针 指针的特殊之处在于:指针变量相对应的内存空间存储的值

qq_33287871的博客 178

传感器采集信息的频率(采样频率)

较高的采集频率通常能提供更详细的信息,但也会增加数据处理和存储的负担。在某些应用中,较高的采样频率可能是必要的,而在其他情况下,则可能会选择适当的低采样频率以降低功耗和数据处理压力。传感器采集信息的频率(采样频率)是指传感器在一定时间内对输入信号进行采样的次数。对于一些需要快速检测和响应的应用,如运动传感器、声音传感器等,高采样频率是至关重要的。高采样频率通常需要更多的功耗和更大的存储容量,因为产生的数据量更大。例如,对于快速运动的对象,较低的采样频率可能无法捕捉到运动的真实轨迹。

chen的博客 5339

c++深拷贝与浅拷贝

浅拷贝:简单的赋值拷贝操作(这个是系统默认提供的) 深拷贝:在堆区重新释放空间,进行拷贝操作(要自己写的) 简单来说,只要类属性里有指针等就必须利用深拷贝操作 为便于深刻理解,先看一个实例: #include<iostream> using namespace std; class Person ******Person类分隔符******* { public: Person(){ cout<<"默认构

qq_63211065的博客 3871

SpringBoot SSE避坑指南:当客户端突然断开时服务端SseEmitter的正确回收姿势

本文深入探讨了SpringBoot中SSE连接的生命周期管理,特别是客户端主动断开连接时服务端SseEmitter的正确回收机制。文章重点分析了客户端调用eventSource.cancel()等场景下,如何利用onCompletion()回调进行可靠的资源清理,避免内存泄漏,并提供了防御式编程策略和实战优化建议。

mm9012的博客 777

关于空指针(指针指向为NULL)和void类型的指针的理解

正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢(1)空指针所对应的是指指向的对象为空的指针。           不经发问,什么叫指向为空呢?要理解这点,必须理解如下几点(有点啰嗦,但很细,别嫌我烦):(a)任何指针都有类型(说穿了指针都是变量,只不过变...

AplusX 1万+

计算机技术发展5大阶段,现阶段计算机技术应用及发展

【摘要】现代计算机科学技术的发展和普及运用,为世界各国民众基础性生产生活实践活动的组织开展路径造成了深刻影响,本文围绕现阶段计算机技术应用及发展,择取两个具体方面,展开了简要分析。【关键词】计算机技术;应用;发展改革开放以来,计算机设备的广泛运用,促进了计算机科学技术的逐步发展成熟。计算机科学技术是具备新兴表现特征的尖端应用技术,其在现代工业生产和社会生活实践活动过程中的广泛引入运用,给世界各国基...

weixin_42126677的博客 2637

【Python3教程】Python3高级篇之uWSGI 安装配置

本文介绍了在Python 3环境中安装和配置uWSGI的完整流程,涵盖基本安装、Flask/Django应用部署、Nginx集成以及systemd管理等关键环节。主要内容包括:uWSGI的安装前提条件,创建简单WSGI应用,编写uWSGI配置文件(.ini格式),与Nginx配合实现生产环境部署,以及使用systemd实现服务管理。文章还提供了常见Web框架(Flask、Django)的部署示例和高级配置建议,如负载均衡、HTTPS设置等。最后列出了权限、端口占用等常见问题的解决方案,为开发者提供了一套完整

No8g攻城狮的博客 436

C++中引用与指针的区别_cpp 引用与指针的区别

学过C的朋友应该都知道指针,刚开始学习指针的时候,都会觉得指针很难,学完了指针才发现指针就是保存的地址。引用没有分配内存空间,所以访问函数形参就是访问引用的变量,是直接访问。而指针分配了内存空间用来保存变量的地址,需要通过保存的地址找到指向的变量,是间接访问。而指针在传参的时候,必须传变量的地址过去,否则不能改变变量的值。5、sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到的是指针本身的大小。6、引用访问一个变量是直接访问,而指针访问一个变量是间接访问。二、引用与指针的区别。

2401_87555420的博客 444

2025必备:C#上位机自动更新方案,支持断点续传与版本回滚(附完整源码)

摘要:工业上位机自动更新方案解析 本文针对工业现场上位机更新效率低下、风险高的问题,提出了一套完整的自动更新解决方案。该方案包含四个核心模块:版本检测(后台比对版本)、断点下载(支持网络中断续传)、安装更新(自动备份旧版本)和版本回滚(更新失败快速恢复)。通过独立更新工具与主程序解耦的设计,实现了"不影响生产+有退路"的工业级更新要求。方案基于.NET Framework开发,采用HTTP协议通信,包含详细的代码实现和工业场景适配说明,解决了U盘更新效率低、网络不稳定导致下载失败、更新后

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

C++ 引用以及引用与指针的区别

概述 前面整理了指针的用法,但是经常和指针拿来对比东西是引用。确实指针在使用的过程中会有很多的麻烦,比如赋初值、使用时判空、无效指针、深浅拷贝等等。在我看来引用的指针的高级替代,它的使用规则规避了很多出错的可能。下面就对引用进行整理。 需要注意的是C11引入了右值引用,我们这里所说的引用都是在讨论左值引用。 1、什么是引用? 引用是给对象起了一个别名,它也是一种复合类型。通过将声明符写成&amp;amp;amp;amp;amp;amp;amp;...

weixin_39640298的博客 2923

基于STM32的多传感器融合的设施农业小型搬运机器人避障控制系统设计

针对设施农业场景中狭窄通道、障碍物多样(如农机具、作物植株、水管)的特点,设计一款基于 STM32 的小型搬运机器人避障控制系统。系统通过多传感器融合实现 360° 环境感知,采用模糊 PID 控制算法实现平滑避障,满足温室、大棚等场景的搬运需求。通过在温室环境测试,系统可实现对直径≥5cm 障碍物的有效检测(检测距离误差≤5%),避障转向半径≤30cm,平均功耗≤15W。后续可通过增加激光雷达(如 TFmini)提升远距离障碍物检测能力,结合 SLAM 算法实现路径规划。

weixin_42300449的博客 859

【CanMV K210】AI 视觉 MNIST 手写数字识别与分类推理

本文介绍了基于CanMV K210开发板的MNIST手写数字识别实验。实验通过摄像头采集图像,经过开窗、灰度化、缩放、反色等预处理后,使用KPU神经网络加速器运行MNIST分类模型,最终在LCD上显示识别结果。重点讲解了分类模型与检测模型的区别、图像预处理流程以及KPU推理结果的解析方法。实验帮助理解从图像采集到分类输出的完整AI视觉处理链路,并提供了调试思路和硬件连接说明。

Mr数据杨 364

C++:指针和引用的区别

转自:https://www.zhihu.com/question/37608201/answer/545635054 引用是C++引入的重要机制(C语言没有引用),它使原来在C中必须用指针来实现的功能有了另一种实现的选择,在书写形式上更为简洁。那么引用的本质是什么,它与指针又有什么关系呢? 1.引用的底层实现方式 引用被称为变量的别名,它不能脱离被引用对象独立存在,这是在高级语言层面的概念和理解,并未解释引用的实现方式。常见错误说法是“引用”自身不是一个变量,甚至编译器可以不以引用分配空间。 .

JacksonKim的博客 1756

储能电池管理系统介绍(一)

介绍储能BMS的架构以及各模块功能

manjixingkong1234的专栏 1914

c++中的引用与指针的区别

c++中的引用与指针的区别     ★ 相同点:     1. 都是地址的概念;     指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。     ★ 区别:     1. 指针是一个实体,而引用仅是个别名;     2. 引用使用时无需解引用(*),指针需要解引用;     3. 引用只能在定义时被初始化一次,之后不可变;指针可变;

Hist_花透的博客 637

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++指针和引用的区别

#C++指针和引用的区别 1. 指针和引用的定义和性质区别 指针:本质是变量,这个变量存储的是指向存储单元的地址, 需要分配空间。 引用只是变量的别名,不需要分配空间。 指针在定义的时候不一定要初始化,并且指向的空间可变; 引用定义的时候必须初始化,并且不能改变(引用的值不能为NULL)。 有多级指针,无多级引用;有const指针,无const引用。 指针的自增为指向下一个空间,而引用是引用的变量加1 sizeof引用是变量(对象)的大小,而sizeof指针是指针本身的大小。 引用访

weixin_39747451的博客 117

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

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

C++中引用传递与指针传递区别

C++中引用传递与指针传递区别 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变

WallSky的专栏 1410

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Cpp指针和引用的区别

指针 #include <iostream> using namespace std; int * mac() { int *i=new int(10); return i; } int macp(int *n) { cout<<*n<<endl; } int main() { int i=10; int *p=&i; int *pp=mac(); printf("%d\n",*p); printf("%d\n",*pp); return

weixin_43572257的博客 362

C++中引用和指针的区别

这是自己的理解,在本身a和b只是两个不同的符号,但是它们所对应的内存块是同一块,所以它们就互为别名,本质上还是内存地址。而且这个也能够解释为什么引用不占用内存空间。 ...

越丘的博客 1042
上一篇: 技术博客
下一篇: C++ Program3 读书笔记第一章
LJDirectxProgram
博客等级 码龄16年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值