C++重新入门-指针篇

C++ 中的指针是一种非常重要的数据类型,它们存储了内存地址,可以用来直接访问和操作内存中的数据。指针提供了灵活性和直接性,但也需要谨慎使用,因为误用指针可能导致程序崩溃或安全漏洞。以下是对 C++ 指针的详细解释:

1. 指针的声明和初始化

指针的声明类似于其他变量,但需要在类型前面加上星号 * 表示它是一个指针。初始化指针时,通常将其指向某个变量的地址,或者使用空指针初始化。

int *ptr; // 声明一个指向整数的指针
int num = 10;
ptr = # // 将指针 ptr 指向变量 num 的地址
int *nullPtr = nullptr; // 初始化为空指针

2. 指针的解引用

解引用指针意味着访问指针所指向的内存地址中存储的值。可以使用星号 * 来解引用指针。

int value = *ptr; // 获取 ptr 指针所指向地址中的值

3. 指针的算术运算

指针可以进行算术运算,例如加法和减法。这些运算会根据指针指向的数据类型,按照内存中的字节大小移动指针。

int array[5] = {1, 2, 3, 4, 5};
int *ptr = &array[0]; // 指向数组的第一个元素
ptr++; // 指针现在指向数组的第二个元素

4. 指针和数组

指针和数组之间有着密切的关系,可以通过指针来遍历数组。

int array[5] = {1, 2, 3, 4, 5};
int *ptr = array; // 指向数组的第一个元素
for (int i = 0; i < 5; i++) {cout << *ptr << " "; // 输出数组元素的值ptr++; // 指向下一个数组元素
}

5. 指针和函数

指针在函数中的应用十分广泛,可以通过指针来传递参数或者返回值,还可以使用指针来操作函数外部的变量。

void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}int main() {int x = 5, y = 10;swap(&x, &y);cout << "x = " << x << ", y = " << y; // 输出 x = 10, y = 5return 0;
}

6. 指针和动态内存分配

通过 new 运算符可以动态地分配内存,返回的是指向分配的内存的指针。记得在不需要使用该内存时使用 delete 运算符释放内存,以防止内存泄漏。

int *ptr = new int; // 动态分配一个整数大小的内存空间
*ptr = 5;
delete ptr; // 释放动态分配的内存

7. 空指针

空指针是指未初始化的指针,或者指向空地址的指针。在 C++ 中,可以使用 nullptr 关键字来表示空指针。

int *ptr = nullptr;

8. 野指针

野指针是指指向未知内存地址的指针,使用野指针可能导致程序崩溃或未定义的行为。应该尽量避免使用野指针。

以上是关于 C++ 指针的基本解释,指针是 C++ 中一个重要且强大的特性,熟练掌握指针的使用对于进行底层的内存操作以及构建高效的数据结构都非常有帮助。但也要注意指针的潜在风险,以避免引发各种问题。

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

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

相关文章

那些也许你不知道的操作符!

前言 操作符有很多种&#xff0c;目前我们已经了解了一部分 例如最简单的、-、*、/、&#xff0c;还有我们学到的&&&#xff0c;||&#xff0c;!等&#xff0c;但是操作符可不是就只有这么些的&#xff0c;让我们一起来看看吧 目录 1. 移位操作符 原码、反码、补码…

当go get获取不到软件包时

当使用go get命令获取软件包时&#xff0c;如果无法成功获取&#xff0c;您可以尝试以下方法来解决问题&#xff1a; 检查网络连接&#xff1a;首先&#xff0c;确保您的计算机能够访问互联网&#xff0c;并且没有任何网络防火墙或代理设置阻止了go get命令的正常运行。 设置代…

Stream Query Denoising for Vectorized HD Map Construction

参考代码&#xff1a;截止2024.02未开源 动机与出发点 这篇文章是在StreamMapNet的基础上做的&#xff0c;为了在局部地图感知任务上提升时序上的感知稳定性&#xff0c;参考DN-DETR中的去噪方案&#xff0c;为局部地图感知提出一种针对局部地图元素的加噪声方案以及去噪逻辑。…

【开源】JAVA+Vue.js实现海南旅游景点推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

深入理解XGBoost:集成学习与堆叠模型

导言 XGBoost是一种强大的集成学习算法&#xff0c;但在解决复杂问题时&#xff0c;单个模型可能无法达到最佳性能。集成学习和堆叠模型是两种有效的方法&#xff0c;可以进一步提高模型的性能。本教程将深入探讨如何在Python中应用集成学习和堆叠模型&#xff0c;使用代码示例…

Linux命令-break命令(结束for,while或until循环。)

说明 结束for&#xff0c;while或until循环&#xff0c;可指定退出几层循环。 语法 break [n]参数 n&#xff08;可选&#xff09;&#xff1a;大于等于1的整数&#xff0c;用于指定退出几层循环。 返回值 返回成功除非n小于1。 示例 # break的可选参数n缺省值为1。 # …

蓝牙BLE学习-安全

1.基本概念 蓝牙标准规定了5种基本的安全服务 身份验证:根据通信设备的蓝牙地址验证其身份。蓝牙不提供本地用户身份验证。保密性:确保只有授权的设备才能访问和查看传输的数据&#xff0c;防止窃听造成的信息泄露。授权(Authorization):在允许设备使用某项服务之前&#xff…

Verilog刷题笔记29

题目&#xff1a; Create a 100-bit binary ripple-carry adder by instantiating 100 full adders. The adder adds two 100-bit numbers and a carry-in to produce a 100-bit sum and carry out. To encourage you to actually instantiate full adders, also output the ca…

C++异常特性以及使用

异常 1.C传统的处理错误方式2.异常概念3.异常使用规则抛出和匹配规则 4.异常的重新抛出4.异常安全5.异常规范6.使用自定义的异常7.C标准异常体系7.异常优缺点 1.C传统的处理错误方式 终止程序&#xff1a;如assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&a…

[CUDA 学习笔记] Reduce 算子优化

Reduce 算子优化 注: 本文主要是对文章 【BBuf的CUDA笔记】三&#xff0c;reduce优化入门学习笔记 - 知乎 的学习整理 Reduce 又称之为归约, 即根据数组中的每个元素得到一个输出值, 常见的包括求和(sum)、取最大值(max)、取最小值(min)等. 前言 本文同样按照英伟达官方 PP…

C++ //练习 5.6 改写上一题的程序,使用条件运算符(参见4.7节,第134页)代替if else语句。

C Primer&#xff08;第5版&#xff09; 练习 5.6 练习 5.6 改写上一题的程序&#xff0c;使用条件运算符&#xff08;参见4.7节&#xff0c;第134页&#xff09;代替if else语句。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码…

EasyRecovery软件2024永久绿色免费版下载

EasyRecovery软件在数据恢复领域享有良好的声誉&#xff0c;并且被许多用户认为是一款好用且功能强大的软件。以下是对其功能和用户评价的简要概述&#xff1a; 恢复功能&#xff1a; EasyRecovery提供全面的数据恢复功能&#xff0c;可以恢复因删除、格式化、分区丢失、硬盘故…

Ubuntu20.04更新Cmake版本详解

最近在跑一个融合惯导定位的slam框架ins_eskf_kitti&#xff0c;在框架的安装过程中&#xff0c;需要对从GitHub上克隆下来的glog进行编译。其命令如下&#xff1a; glog&#xff1a; git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. m…

3月第一批次❗教资认定流程简易版来啦

&#x1f4dd;材料准备 1、身份证 2、户口本/学生证/居住证/毕业证 3、考试合格证明(免试人员需要师范生职业能力证书) 4、普通话证书 5、学历证书或认证报告 6、近期一寸白底证件照 7、有效期内体检报告 8、个人承诺书(网上签署) 网上申报 1、上传个人承诺书 2、校验普通话证书…

使用 C++23 从零实现 RISC-V 模拟器(2):内存和总线

&#x1f449;&#x1f3fb; 文章汇总「从零实现模拟器、操作系统、数据库、编译器…」&#xff1a;https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc 内存和总线 上一部分将内存全部放到了 CPU 里面&#xff0c;总线的概念是隐含着的。这一部分将内存拆分出来…

业务流程

一、需求分析和设计&#xff1a; 在项目启动阶段&#xff0c;需要与业务人员和产品经理充分沟通&#xff0c;了解业务需求&#xff0c;并根据需求进行系统设计和数据库设计。这一阶段的输出通常是需求文档、系统架构设计、数据库设计等。 1.需求文档 需求文档是一份非常重要…

java中事务的使用

文章目录 前言一、同一张表1.业务代码2.测试代码3.测试结果 二、不同表1.业务代码2.测试代码3.测试结果 总结 前言 本文将介绍在springboot中使用Transactional注解来完成对数据库事务的操作&#xff0c;保证数据一致性。 一、同一张表 1.业务代码 Controller Controller p…

【Web】CVE-2021-31805 s2-062漏洞复现学习

目录 Struts2介绍 漏洞概况 OGNL与Struts2 简单原理 漏洞复现 正向rce 反弹shell payload分析 Struts2介绍 Struts 2 是一个流行的用于构建 Java Web 应用程序的开源 Web 应用程序框架。它是 Apache 软件基金会下的一个顶级项目&#xff0c;是 Struts 框架的升级版本。…

使用 devc++ 开发 easyx 实现 Direct2D 交互

代码为 codebus 另一先生的 文案 EasyX 的三种绘图抗锯齿方法 - CodeBus 这里移植到 devc 移植操作如下&#xff1a; 调用dev 的链接库方式&#xff1a; project -> project option -> 如图所示 稍作修改的代码。 #include <graphics.h> #include <d2d1.…

计算机的大脑—中央处理单元(CPU)(重点认识运算器和控制器)

计算机的中央处理单元&#xff08;CPU&#xff09;是计算机的主要部件之一&#xff0c;负责解释和执行大部分计算机指令&#xff0c;是计算机的大脑。CPU执行的操作包括算术运算、数据传输和指令的解释执行。现代CPU的性能取决于多种因素&#xff0c;包括其核心数量、时钟速度、…