引用和指针的区别都有什么_C++指针与引用的区别

指针与引用是C++中两个很重要的概念,它们功能看过去很相似,就是都是间接引用某个对象,那么我们应该在什么时候使用指针,什么时候使用引用呢,下面请允许我慢慢道来:

2a22403e5a44a792c506759919710fda.png

1.永远不要使用一个指向空值的引用。一个引用必须始终指向某个对象,所以当你确定使用一个变量指向某个对象时,但是这个对象在某些时间可能指向控制,这时候你就必须把变量声明为指针类型,而不是引用!当你确定这个变量始终指向某个对象,这时候你就可以把变量声明为引用类型。

char *str=0;  //设置指针为空值char &s=*str; //让引用指向空值

你应该避免出现上面的错误!

2.因为引用肯定要指向一个对象,所以,在C语言里引用必须被初始化。 string& rs; // 错 误 引 用 必 须 被 初 始 化 string s("xyzzy"); string& rs = s; // 正 确 rs 指 向 s

指 针 没 有 这 样 的 限 制:

 string *ps; // 未 初 始 化 的 指 针                  // 合 法 但 危 险复制代码

3.不 存 在 指 向 空 值 的 引 用 这 个 事 实 意 味 着 使 用 引 用 的 代 码 效 率 比 使 用 指 针 的 要 高,因 为 在 使 用 引 用 之 前 不 需 要 测 试 它 的 合 法 性。

void printDouble(const double& rd){     cout << rd;    // 不 需 要 测 试 rd,它}                   // 肯 定 指 向 一 个 double 值

相 反 指 针 则 应 该 总 是 被 测 试 防 止 其 为 空:

 void printDouble(const double *pd)    {        if (pd) {    // 检 查 是 否 为 NULL            cout << *pd;        }    }

4.指 针 与 引 用 的 另 一 个 重 要 的 不 同 是 指 针 可 以 被 重 新 赋 值 以 指 向 另 一 个 不 同 的 对象, 但 是 引 用 则 总 是 指 向 在 初 始 化 时 被 指 定 的 对 象 以 后 不 能 改 变。

string s1("Nancy");    string s2("Clancy");    string& rs = s1; // rs 引 用 s1    string *ps = &s1; // ps 指 向 s1    rs = s2; // rs 仍 旧 引 用 s1,            // 但 是 s1 的 值 现 在 是           // "Clancy"    ps = &s2; // ps 现 在 指 向 s2;              // s1 没 有 改 变

5.重 载 某 个 操 作 符 时 你 应 该 使 用 引 用。 最 普 通 的 例 子 是重载操 作 符 []。 这 个 操 作 符 典 型 的 用 法 是 返 回 一 个 目 标 对 象 其 能 被 赋 值。

总 的 来 说 在 以 下 情 况 下 你 应 该 使 用 指 针 :

一 是 你 考 虑 到 存 在 不 指 向 任 何 对 象 的可 能, 在 这 种 情 况 下 你 能 够 设 置 指 针 为 空 ;

二是你 需 要 能 够 在 不 同 的 时 刻 指向 不 同 的 对 象 ,在 这 种 情 况 下 你 能 改 变 指 针 的 指 向。


如 果 总 是 指 向 一 个 对 象,并 且 一 旦 指 向 一 个 对 象 后 就 不 会 改 变 指 向, 那 么 你 应 该 使 用 引 用。

获取更多点击下方链接 “了解更多”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

混合云K8s容器化应用弹性伸缩实战

简介&#xff1a; 混合云K8s容器化应用弹性伸缩实战1. 前提条件 本最佳实践的软件环境要求如下&#xff1a; 应用环境&#xff1a; ①容器服务ACK基于专有云V3.10.0版本。 ②公共云云企业网服务CEN。 ③公共云弹性伸缩组服务ESS。 配置条件&#xff1a; 1&#xff09;使用专有云…

lodop打印不显示页码_Excel|13个Excel打印技巧汇总,打印技巧大全

打印技巧是工作必备&#xff0c;无需理由&#xff01;很多时候大家得不到想要的打印效果&#xff0c;偶尔打印一两张表格&#xff0c;会出现各种状况&#xff1a;标题行不见了&#xff1f;打印范围错了&#xff1f;页眉页脚不对&#xff1f;打印一个内容&#xff0c;总得弄出一…

关于写好文章的3个心法和5点技巧

简介&#xff1a; 技术类文章最需要的是扎实的经验累积、深度思考和精益求精的精神&#xff0c;这些技巧&#xff0c;希望能够锦上添花。 作者 | 双宏 来源 | 阿里技术公众号 我是双宏&#xff0c;负责阿里巴巴内部技术人社区的内容运营&#xff0c;包括每天头条热文专题推荐、…

工商银行分布式服务 C10K 场景解决方案

简介&#xff1a; Dubbo 是一款轻量级的开源 Java 服务框架&#xff0c;是众多企业在建设分布式服务架构时的首选。中国工商银行自 2014 年开始探索分布式架构转型工作&#xff0c;基于开源 Dubbo 自主研发了分布式服务平台。 作者 | 颜高飞 来源 | 阿里巴巴云原生公众号 Dubb…

matlab cell转数组_MATLAB批量修改文件名

评论区旁友建议使用narsort排序而不是直接修改文件名。我觉得相关条件下也可以&#xff0c;所以原文末尾加上了narsot排序法。以下是原文2019-05-09最近实验室小可爱帮忙做实验和记录实验数据&#xff0c;不过新手总有些错误操作&#xff0c;比方说因为忘记修改存储路径导致图片…

Spring Cloud Bus 消息总线介绍

简介&#xff1a; 本文配套可交互教程已登录阿里云知行动手实验室&#xff0c;PC 端登录 start.aliyun.com 在浏览器中立即体验。 作者 | 洛夜 来源 | 阿里巴巴云原生公众号 本文配套可交互教程已登录阿里云知行动手实验室&#xff0c;PC 端登录 start.aliyun.com 在浏览器中立…

更灵活的边缘云原生运维:OpenYurt 单元化部署新增 Patch 特性

简介&#xff1a; 在正文开始之前&#xff0c;我们先回顾一下单元化部署的概念和设计理念。在边缘计算场景下&#xff0c;计算节点具有很明显的地域分布属性&#xff0c;相同的应用可能需要部署在不同地域下的计算节点上。 作者 | 张杰&#xff08;冰羽&#xff09; 来源 | 阿里…

Gartner:2022年全球IT支出将超4万亿美元,软件增速最高

编辑 | 宋慧 供稿 | Gartner 根据Gartner的最新预测&#xff0c;2022年全球IT支出预计将达到4.5万亿美元&#xff0c;相比2021年增长5.5%。 Gartner杰出研究副总裁John-David Lovelock表示&#xff1a;“越来越多的企业将构建新技术和软件&#xff0c;而不是购买和部署它们&am…

Flink 实时计算在微博的应用

简介&#xff1a; 微博通过将 Flink 实时流计算框架跟业务场景相结合&#xff0c;在平台化、服务化方面做了很大的工作&#xff0c;在开发效率、稳定性方面也做了很多优化。我们通过模块化设计和平台化开发&#xff0c;提高开发效率。 微博机器学习研发中心数据计算负责人&…

移动云帮我养出了一片致富鱼塘

“通过U鱼智慧管理平台&#xff0c;水产养殖由‘人治’转变为‘智治’&#xff0c;养得舒心、卖得放心、吃得安心。”广东省渔业种质保护中心相关负责人表示。准确研究&#xff0c;提升科学养殖水平广东省渔业种质保护中心坐落于广州市南沙区东涌镇&#xff0c;占地580亩&#…

sketch里的ios控件_使用Sketch建立Design System

一、 有关Design System之前的文章《使用Adobe XD建立Design System》中介绍了什么是Design System&#xff0c;它有什么用&#xff0c;在设计的哪个阶段使用以及如何用Adobe XD来搭建。这篇文章主要侧重在UI风格已确定的设计后期&#xff0c;用Sketch工具来搭建一个Design Sys…

论好文章和烂文章

简介&#xff1a; 我们为何写作&#xff1f;对于许多技术同学来说&#xff0c;写作是一件比写代码困难许多的事情&#xff0c;和电脑相顾无言数小时&#xff0c;发现自己写不出什么像样的东西来&#xff0c;着实不是一种很好的体验。 作者 | 许晓斌 来源 | 阿里巴巴云原生公众号…

好代码实践:基于Redis的轻量级分布式均衡消费队列

简介&#xff1a; 好代码&#xff0c;给人第一个印象的感觉&#xff0c;就像一篇好文章一样&#xff0c;读起来朗朗上口。不同的文章有不同的风格体裁&#xff0c;不同的代码也有不同的编程风格要求。Python有严格的缩进&#xff0c;像诗歌一样工整对仗&#xff1b;C语言面向过…

浅析低功耗广域网及在智慧城市中的应用

作者 | 沈建华、冷咏雪根据知名物联网分析机构IoT Analytics预测&#xff0c;到2025年&#xff0c;物联网连接数将达到非物联网连接数的3倍。低功耗广域网(LPWAN)作为物联网连接的核心基础设施&#xff0c;其业务特点是发送数据极小&#xff0c;并且为了维持电池供电设备的长时…

rocketmq怎么保证数据不会重复_RocketMQ保证信息有序性和防止重复

分布式开放消息系统(RocketMQ)的原理与实践分布式消息系统做为实现分布式系统可扩展、可伸缩性的关键组件&#xff0c;须要具备高吞吐量、高可用等特色。而谈到消息系统的设计&#xff0c;就回避不了两个问题&#xff1a;java消息的顺序问题消息的重复问题RocketMQ做为阿里开源…

云效Codeup代码评审中的代码协同

简介&#xff1a; 云效 Codeup 汇集了阿里巴巴最新的代码托管、代码协同技术&#xff0c;希望能够造福更多中国和世界的开发者。 大神说&#xff1a;“Show me the code”&#xff0c;于是就有了代码评审。 “Talk is cheap. Show me the code.” ——Linus Torvalds, founder …

代码安全无忧—云效Codeup代码加密技术发展之路

简介&#xff1a; 从代码服务及代码安全角度出发&#xff0c;看看云效代码加密技术如何解决这一问题 代码数据存在云端&#xff0c;如何保障它的安全&#xff1f; 部分企业管理者对于云端代码托管存在一丝担心&#xff1a;我的代码存在云端服务器&#xff0c;会不会被泄露&…

杀死 Oculus ,Facebook 改名 Meta ,是押注元宇宙还是“金蝉脱壳”?

整理 | 祝涛出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;美东时间10月28日周四&#xff0c;在名为Facebook Connect的年度大会上&#xff0c;Facebook宣布&#xff0c;Facebook将公司名称更改为“Meta”&#xff0c;这个新名字反映了该公司在社交媒体之外的雄心…

java sdp_[java,SDP] java 7 SDP 技术/Socket Direct Protocol 2

With Java 7 and Sockets Direct Protocol , Java Now does RDMA ( Remote Direct Memory Access)有了 SDP 技术支持之后的 Java 7 已经开始逐步实现 RDMA 技术 (远程内存直接访问)RDMA is Remote Dynamic Memory Accesss -- which is a way of moving application buffers bet…

百信银行基于 Apache Hudi 实时数据湖演进方案

简介&#xff1a; 本文介绍了百信银行实时计算平台的建设情况&#xff0c;实时数据湖构建在 Hudi 上的方案和实践方法&#xff0c;以及实时计算平台集成 Hudi 和使用 Hudi 的方式。 本文介绍了百信银行实时计算平台的建设情况&#xff0c;实时数据湖构建在 Hudi 上的方案和实践…