0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

指针和引用的区别及使用场景介绍

Q4MP_gh_c472c21 来源:程序喵大人 作者:程序喵大人 2022-03-11 10:24 次阅读

先抛出两个问题:

指针和引用有什么区别?

什么时候使用指针?什么时候使用引用?

一、指针和引用的区别

首先,看一段代码:

int a = 1;int b = 2;int *c = nullptr;c = &a;int &d = b;

指针其实就是一个存放内存地址的整数,这个整数表示的是被指向的变量的地址。

引用其实就是变量的别名,就是给变量重新起了一个名字,注意引用既然是个别名,那它一定要有本体,一个人叫王二小,我们也可以给它起个别名叫二蛋,我们提到二蛋和王二小其实都是同一个人。

区别:

指针在声明时可以暂时不初始化,即pointer = nullptr,指针在生命周期内随时都可能是空指针,所以在每次使用时都要做检查,防止出现空指针异常问题,而引用却不需要做检查,因为引用永远都不会为空,它一定有本体,一定得代表某个对象,引用在创建的同时必须被初始化。

void FuncPtr(int *ptr) { if (ptr != nullptr) { cout << *ptr; }} void FuncReference(int &ref) { cout << ref;}

指针存放的是地址,指针可以被重新赋值,可以在初始化时指向一个对象,在其它时刻也可以指向另一个对象,而引用非常专一,它会从一而终,它总是指向它最初代表的那个对象。再举个例子,有一个人叫特朗普,为他起个引用别名叫历史上最傻吊的总统,这个引用一定会从一而终,即无论什么时候,历史上最傻吊的总统一定是特朗普。而美国总统可以当作个指针,一段时间可以是奥巴马,过一段时间可以是特朗普,再过一段时间可能是nullptr。

二、指针和引用的使用场景

引用的主要功能就是作为函数的参数和返回值,看一段代码:

struct A { int a;};void func(const A &a) { cout << a.a;} vector vec(10);vec[3] = 3;为什么通过vec[3] =3可以改变vector容器的值,因为[]操作符返回的就是引用,相当于为内部的变量起了一个别名,这里还可以让[]操作符返回一个指针,即*vec[3]=3,这是不是有点丑,而且不符合语法需求。

其实我们平时编程过程中可能也注意到,实际上引用可以做的事情指针都可以做,但为什么还要引用这个东西?

答案:

用恰当的工具做恰如其分的工作,指针可以毫无约束的操作内存中的任何东西,功能十分强大,但是也很危险,所以可以在恰当的时机使用引用,当你需要指向某个东西,而且一定专一,绝不会让其指向其它东西,例如有些函数参数为了避免拷贝可以使用引用,或者实现一个操作符而其语法需求无法由指针达成,例如vec[3]=3,可以使用引用,其它任何时候,都要使用指针。

引用在c++11后其实有很多知识点,具体可以参考下列文章:

左值引用、右值引用、移动语义、完美转发,你知道的不知道的都在这里

参考资料

《More Effective C++》

https://www.runoob.com/w3cnote/cpp-difference-between-pointers-and-references.html

https://blog.csdn.net/weikangc/article/details/49762929

https://www.jianshu.com/p/e548a978d737

https://zhuanlan.zhihu.com/p/63096392

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70361
  • 引用
    +关注

    关注

    0

    文章

    8

    浏览量

    7689

原文标题:指针和引用有什么区别?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言函数指针六大应用场景详解

    函数指针是一种非常强大的编程工具,它可以让我们以更加灵活的方式编写程序。在本文中,我们将介绍 6 个函数指针的高级应用场景,并贴出相应的代码案例和解释。
    的头像 发表于 04-23 18:19 413次阅读

    NanoEdge AI的技术原理、应用场景及优势

    能耗并提高数据安全性。本文将对 NanoEdge AI 的技术原理、应用场景以及优势进行综述。 1、技术原理 NanoEdge AI 的核心技术包括边缘计算、神经网络压缩和低功耗硬件设计。边缘计算
    发表于 03-12 08:09

    应变片1/4桥、半桥、全桥的区别及其应用场景

    分为1/4桥、半桥和全桥。本文将详细介绍这三种桥的区别及其各自适用的应用场景。 1/4桥是将单个应变片的电阻串联在电桥的一个支路上,另一个支路上则为固定电阻。当应变片发生变形时,它的电阻值发生变化,导致电桥不平衡,进而产
    的头像 发表于 02-04 14:48 2546次阅读

    AG32VF-MIPI应用场景

    MIPI接口技术在图像和视频传输中的应用越来越广泛,应用场景也在不断拓展,而不仅限于移动设备。MIPI接口在物联网、智能家居、智能监控、智能电视、智能汽车等领域也得到广泛应用。 MIPI还可
    发表于 01-22 08:56

    函数指针的基本概念和语法

    函数指针是一种非常强大的编程工具,它可以让我们以更加灵活的方式编写程序。在本文中,我们将介绍 8 个函数指针的高级应用场景,并贴出相应的代码案例和解释。
    的头像 发表于 12-12 09:33 253次阅读

    vlookup绝对引用和相对引用区别

    绝对引用和相对引用是在Excel中使用VLOOKUP函数时的两种引用方式,它们的主要区别在于在填充公式时,引用的单元格地址是否会发生改变。
    的头像 发表于 12-01 10:27 1227次阅读

    上位机和plc有啥区别 上位机和PLC的应用场景

    上位机和plc有啥区别 上位机和PLC的应用场景  上位机和PLC是工业自动化领域中常见的两种设备,它们在功能、应用场景以及工作原理等方面存在一定的差异。本文将从这些角度详细讨论上位机和PLC的
    的头像 发表于 11-22 16:51 4326次阅读

    阻感负载与电感负载的区别及应用场景

    阻感负载与电感负载的区别及应用场景 阻感负载和电感负载是电路中非常重要的两种负载类型。它们在电子工程中有着不同的作用和应用场景。本文将详细介绍阻感负载和电感负载的
    的头像 发表于 11-09 16:58 580次阅读

    labview 和 wincc 的区别 使用场景

    labview 和 wincc 的区别 使用场景 都是上位机软件,都可以做监控软件 wincc的名气也比较大 对比的资料较少 写这些文章的人,从自己的从事的行业出发,带有自己的思维 使用的场景 肯定
    发表于 10-27 18:01

    【华秋干货铺】SMT组装工艺流程的应用场景

    工艺流程的应用场景。 01单面纯贴片工艺 应用场景: 仅在一面有需要焊接的贴片器件。 02双面纯贴片工艺 应用场景: A/B面均为贴片元件。 03单面混装工艺 应用场景: A面有贴
    发表于 10-20 10:33

    SMT组装工艺流程的应用场景

    工艺流程的应用场景。 01单面纯贴片工艺 应用场景: 仅在一面有需要焊接的贴片器件。 02双面纯贴片工艺 应用场景: A/B面均为贴片元件。 03单面混装工艺 应用场景: A面有贴
    发表于 10-20 10:31

    SMT组装工艺流程的应用场景(多图)

    工艺流程的应用场景。 一、单面纯贴片工艺 应用场景: 仅在一面有需要焊接的贴片器件。 二、双面纯贴片工艺 应用场景: A/B面均为贴片元件。 三、单面混装工艺 应用场景: A面有
    发表于 10-17 18:10

    网络传输方式中的任播是什么?有哪些应用场景

    网络传输方式有四种,分别为单播、广播、组播和任播。今天Ogcloud的小编将详细介绍组播传输的原理和应用场景
    的头像 发表于 06-27 15:23 373次阅读
    网络传输方式中的任播是什么?有哪些应<b class='flag-5'>用场景</b>?

    C语言指针引用的不同之处及使用场

    指针引用的不同之处是什么?
    发表于 06-14 09:14 180次阅读
    C语言<b class='flag-5'>指针</b>和<b class='flag-5'>引用</b>的不同之处及使<b class='flag-5'>用场</b>合

    蓝牙多连接应用场景举例

    蓝牙多连接应用场景举例 一、蓝牙多连接的通信方式: 1-1、蓝牙MESH组网图: 1-2、蓝牙星型组网图; 二、两种方案的优劣势: 2-1、 MESH方式网络中的节点数量多,能够实现单播、组播
    发表于 05-09 09:09