C++ 引用和指针:内存地址、创建方法及应用解析

C++ 引用和指针

创建引用

引用变量是对现有变量的“别名”,它是使用 & 运算符创建的:

string food = "Pizza"; // 食物变量
string &meal = food;   // 对 food 的引用

现在,我们可以使用变量名 food 或引用名 meal 来引用食物变量:

cout << food << "\n"; // 输出 Pizza
cout << meal << "\n"; // 输出 Pizza

C++ 内存地址

内存地址

在前一页的示例中,使用 & 运算符创建了一个引用变量。但它也可以用于获取变量的内存地址;即变量在计算机上存储的位置。

当在 C++ 中创建一个变量时,会为该变量分配一个内存地址。当我们给变量赋值时,它将存储在这个内存地址中。

要访问它,使用 & 运算符,结果将表示变量存储的位置:

string food = "Pizza";cout << &food; // 输出 0x6dfed4

注意:内存地址以十六进制形式表示(0x…)。注意你可能在你的程序中得不到相同的结果。

为什么知道内存地址很有用呢?

引用和指针在 C++ 中非常重要,因为它们使你能够操作计算机内存中的数据 - 这可以减少代码并提高性能。

这两个特性是使 C++ 与其他编程语言(如 Python 和 Java)不同的因素之一。

C++ 指针

创建指针

可以使用 & 运算符获取变量的内存地址:

string food = "Pizza"; // 类型为 string 的食物变量cout << food;  // 输出 food 的值(Pizza)
cout << &food; // 输出 food 的内存地址(0x6dfed4)

然而,指针是一种将内存地址作为其值的变量。

指针变量指向相同类型的数据类型(如 intstring),并使用 * 运算符创建。将正在处理的变量的地址分配给指针:

string food = "Pizza"; // 类型为 string 的食物变量
string* ptr = &food;   // 指针变量,名为 ptr,存储 food 的地址// 输出 food 的值(Pizza)
cout << food << "\n";// 输出 food 的内存地址(0x6dfed4)
cout << &food << "\n";// 使用指针输出 food 的内存地址(0x6dfed4)
cout << ptr << "\n";
示例解释
  • 使用星号 *string* ptr)创建一个名为 ptr 的指针变量,它指向一个字符串变量。注意指针的类型必须与你正在处理的变量的类型匹配。
  • 使用 & 运算符存储名为 food 的变量的内存地址,并将其分配给指针。
  • 现在,ptr 持有 food 的内存地址的值。

提示:声明指针变量有三种方式,但第一种方式是首选的:

string* mystring; // 首选
string *mystring;
string * mystring;

引用和指针的区别

特性引用指针
初始化必须初始化可以不初始化
可空不允许空引用允许空指针
可变性一旦初始化就不能改变引用指向的变量可以改变指针指向的变量
解引用不需要解引用需要解引用
效率通常比指针更有效率通常比引用效率低

什么时候使用引用和指针

  • 使用引用:
    • 函数参数传递:引用可以传递给函数,函数可以直接修改引用指向的变量,而无需创建副本。
    • 提高效率:引用比指针更有效率,因为不需要指针的解引用操作。
  • 使用指针:
    • 动态内存分配:指针用于动态分配和释放内存。
    • 复杂数据结构:指针用于访问和操作复杂数据结构,例如链表和树。

总而言之,引用和指针都是 C++ 中强大的工具,可以用于高效地操作内存和数据。选择使用引用还是指针取决于具体情况。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

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

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

相关文章

Windows系统安装WinSCP结合内网穿透实现公网远程SSH本地服务器

List item 文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本…

一文读懂RISC-V与ARM

RISC-V和ARM是近年来备受关注的两种处理器架构。RISC-V是一种基于精简指令集计算(RISC)原理的开源指令集架构(ISA)&#xff0c;而ARM是一种专有ISA&#xff0c;由于其长期存在于嵌入式系统和移动设备中&#xff0c;已成为嵌入式系统和移动设备的主导选择。市场以及多年积累的信…

前端开发攻略---利用Flexbox和Margin实现智能布局:如何巧妙分配剩余空间,让你的网页设计更上一层楼?

1、演示 2、flex布局 Flex布局是一种用于Web开发的弹性盒子布局模型&#xff0c;它可以让容器内的子元素在空间分配、对齐和排列方面具有更大的灵活性。以下是Flex布局的基本用法&#xff1a; 容器属性&#xff1a; display: flex;&#xff1a;将容器指定为Flex布局。flex-dire…

Realme GT Neo6 SE ROOT 解锁BL教程

Realme GTNeo6 SE 解锁ROOT教程 前言&#xff1a; 本文解锁BL教程以及深度测试APP来自Realme官方社区。相关操作流程已进行简化&#xff0c;工具由本人制作并提供&#xff0c;降低上手难度&#xff0c;傻瓜式操作&#xff08;工具长期免费更新&#xff09;。 正文&#xff1a…

数据结构面试

当然可以&#xff01;以下是数据结构面试问题及答案整理&#xff1a; **什么是数据结构&#xff1f;** 答&#xff1a;数据结构是指组织和存储数据的方式&#xff0c;它允许高效地访问和操作数据。不同的数据结构有不同的优势和适用场景。常见的基本数据结构包括数组、链表、…

Python docx:在Python中创建和操作Word文档

使用docx库&#xff0c;可以执行各种任务 创建新文档&#xff1a;可以使用库从头开始或基于模板生成新的Word文档。这对于自动生成报告、信函和其他类型的文档非常有用。修改现有文档&#xff1a;可以打开现有的Word文档&#xff0c;并使用库修改其内容、格式、样式等。这对于…

C/C++ 自定义头文件,及头文件结构详解

头文件 在之前介绍的大部分C语言语法基础的章节中列举的实例代码部分&#xff0c;都会在源文件的开始的第一行通过#include预处理指令包含进"stdio.h"&#xff0c;后面这个".h"后缀名的就是头文件了。而什么是头文件呢&#xff1f; 通俗方式理解头文件 …

2024高交会-2024深圳高新技术展-高新技术成果交易会

2024高交会-2024深圳高新技术展-2024高新技术成果展-中国高校技术交易会-第26届高交会-深圳高交会-深圳高科技展-深圳新科技展-深圳高新技术成果展 第二十六届中国国际高新技术成果交易会&#xff08;简称高交会&#xff09; 时间&#xff1a;2024年11月15日-19日 地址&#…

【总结】网络安全工作岗位分类

【总结】网络安全工作岗位分类 备注一、职责分类二、技术分类三、建议 备注 2024/04/11 星期四 目前我国网络安全行业还处在起步阶段&#xff0c;安全相关的工作内容没有一个完整的分类&#xff0c;我根据自己的理解进行了总结 一、职责分类 目前很多互联网公司、金融支付公…

vue node网络代理 实现测试、生产环境前端跨域

node网络代理 实现测试、生产环境前端跨域 package.json "scripts": {"serve": "vue-cli-service serve --open","start": "node server.js","build": "vue-cli-service build","lint": &qu…

【备战蓝桥杯】2024蓝桥杯赛前突击省一:基础数论篇

2024蓝桥杯赛前突击省一&#xff1a;基础算法模版篇 基础数论算法回顾 判断质数&#xff08;试除法&#xff09; 时间复杂度O&#xff08;sqrt(n)&#xff09; static int is_prime(int n){if(n<2) return 0;for (int i2;i<n/i;i){if(n%i0) return 0;}return 1; }质因…

python+Flask+django企业仓库进销存管理信息系统35wiz

Flask提供了更大的灵活性和简单性&#xff0c;适合小型项目和微服务。Django则提供了更多的内置功能&#xff0c;适合大型项目。Flask让开发者更多的控制其组件&#xff0c;而Django则遵循开箱即用的原则 本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行&am…

YOLOv8 推理脚本--置信度保留多位浮点数 特征图可视化

效果 特征图可视化: 4位浮点数: 原始2位浮点数4位浮点数推理 --detect.py 说明 在进行改动前,请大家先阅读下 基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95 ,确保会用我给的推理脚本。 YOLO( ):…

【C++】STL--stackquene

这一节主要学习stack、quene和priority_quene的使用以及模拟实现&#xff0c;最后介绍了容器适配器。 目录 stack的介绍和使用 stack的介绍 stack的使用 stack的模拟实现 queue的介绍和使用 queue的介绍 queue的使用 queue的模拟实现 priority_queue的介绍和使用 pri…

计算机体系结构安全第四次作业——Intel的安全体系结构

一、实现的可能方式 在不改变Intel处理器权限模型的前提下&#xff0c;实现本节课所述的安全体系结构是具有一定挑战性的&#xff0c;但并非不可能。Intel处理器的权限模型主要基于环形权限体系&#xff0c;其中核心组件如CPU、内存管理单元&#xff08;MMU&#xff09;、I/O系…

【漏洞复现】潍微科技-水务信息管理平台 ChangePwd SQL注入漏洞

0x01 产品简介 潍微科技-水务信息管理平台主要帮助水务企业实现水质状态监测、管网运行监控、水厂安全保障、用水实时监控以及排放有效监管,确保居民安全稳定用水、环境有效保护,全面提升水务管理效率。 0x02 漏洞概述 潍微科技-水务信息管理平台 ChangePwd 接口存在SQL注…

训练营第二十天(二叉树 part06)

训练营第二十天&#xff08;二叉树 part06&#xff09; 654.最大二叉树 力扣题目地址(opens new window) 题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出…

sed 字符替换时目标内容包含 特殊字符怎么处理

背景 想写一个自动修改配置的脚本&#xff0c;输入一个 mysql jdbc 的连接路径&#xff0c;然后替换目标配置中的模版内容&#xff0c;明明很简单的一个内容&#xff0c;结果卡在了 & 这个符号上。 & 到底是什么特殊字符呢&#xff1f;结论&#xff1a;它代表要替换的…

【中级软件设计师】上午题08-UML(上):类图、对象图、用例图

上午题08-UML 1 UML事物2 UML关系2.1 依赖2.2 关联2.2.1 聚合 &#xff08;空心菱形&#xff09;2.2.2 组合 &#xff08;实心菱形&#xff09; 2.3 泛化 &#xff08;实线三角形&#xff09;2.4 实现 &#xff08;虚线三角形&#xff09;2.5 关联多重度 3 类图4 对象图5 用例图…

vue3 + potree 渲染点云数据记录

potree 官网示例 前置条件&#xff1a; potree 无法直接加载 LAS&#xff0c;LCD&#xff0c;PLY等格式的点云文件, 需要通过 PotreeConverte 转换为 octree 数据格式&#xff0c;前端渲染中加载转换后的 json 格式 格式转换方向 .las ---- potreeConverter ----> .json…