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

简介: 'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。```

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++ 中强大的工具,可以用于高效地操作内存和数据。选择使用引用还是指针取决于具体情况。

相关文章
|
10月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
2077 2
|
机器学习/深度学习 文字识别 监控
安全监控系统:技术架构与应用解析
该系统采用模块化设计,集成了行为识别、视频监控、人脸识别、危险区域检测、异常事件检测、日志追溯及消息推送等功能,并可选配OCR识别模块。基于深度学习与开源技术栈(如TensorFlow、OpenCV),系统具备高精度、低延迟特点,支持实时分析儿童行为、监测危险区域、识别异常事件,并将结果推送给教师或家长。同时兼容主流硬件,支持本地化推理与分布式处理,确保可靠性与扩展性,为幼儿园安全管理提供全面解决方案。
695 3
|
11月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
256 4
|
人工智能 API 开发者
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
1016 27
|
数据采集 机器学习/深度学习 存储
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
899 4
|
存储 弹性计算 安全
阿里云服务器ECS通用型规格族解析:实例规格、性能基准与场景化应用指南
作为ECS产品矩阵中的核心序列,通用型规格族以均衡的计算、内存、网络和存储性能著称,覆盖从基础应用到高性能计算的广泛场景。通用型规格族属于独享型云服务器,实例采用固定CPU调度模式,实例的每个CPU绑定到一个物理CPU超线程,实例间无CPU资源争抢,实例计算性能稳定且有严格的SLA保证,在性能上会更加稳定,高负载情况下也不会出现资源争夺现象。本文将深度解析阿里云ECS通用型规格族的技术架构、实例规格特性、最新价格政策及典型应用场景,为云计算选型提供参考。
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
560 1
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
3457 0
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
1161 1

热门文章

最新文章

推荐镜像

更多
  • DNS