指针:从入门到精通

发布时间:2026/10/4 8:02:00

指针:从入门到精通
第二章深入理解指针2今天我们再来学习几个指针的知识点目录第二章深入理解指针2文章目录二、野指针1.概念2.造成野指针的可能原因1.未初始化2.越界访问3.指针指向的空间释放3.如何避免野指针1.初始化2.在使用指针时避免越界访问3.避免返回局部变量的地址三、assert断言四、传值调用和传址调用总结一、const语句在创建变量时把const放在前面这个变量就无法改变了。例如这样n的值就无法修改了。那么const是如何约束指针变量的呢。我们可以发现当const放在*左边时指针指向的内容不可以改变但是指针的指向可以改变。当const放在*右边时指针指向的内容可以改变但是指针的指向不可以改变。二、野指针1.概念野指针的指向位置是不可知的随机的、不正确的、没有明确限制的指向的内容不属于当前程序。2.造成野指针的可能原因1.未初始化2.越界访问3.指针指向的空间释放指针指向text函数但是函数在调用完之后taxt函数空间会被释放p就会变成野指针。3.如何避免野指针对应野指针出现原因要从3个方面避免。1.初始化创建指针变量时一定要初始化。可以初始化成NULL。int* pNULL;NULL专门用来初始化指针变量初始化成NULL的指针变量意味着这个指针暂时没有指向有效空间我们暂时不能访问它。2.在使用指针时避免越界访问一个程序申请了多少空间通过指针也就只能访问多少空间不能超出范围访问。指针变量不再使用时要把该指针置为NULL在指针使用之前检查有效性。例子3.避免返回局部变量的地址如野指针出现的第三个原因不要返回局部变量的地址。三、assert断言assert.h定义了宏assert()用于在运行时确保程序符合指定条件如果不符合就报错停止运行。这个宏常常被称为“断言”。#includeassert.h assert(p!NULL);代码运行到上面的语句时验证p是否等于NULL。如果p确实不等于NULL程序继续运行否则就停止运行并且给出报错信息提示。assert()宏接受一个表达式作为参数。如果表达式为真就继续运行不产生任何作用继续运行。表达式为假assert就会报错并给出错误信息显示没有通过的表达式以及包含这个表达式的文件名和行号。如果确定了程序没有问题在#includeassert.h语句前面定义一个宏NDEBUG。#define NDEBUG然后重新编译编译器就会禁用文件中所有的assert()语句。如果程序又出现问题可以移除#define NDEBUG指令再编译。使用效果如下四、传值调用和传址调用学习指针是为了解决问题那什么问题非指针不可呢比如我们要实现一个函数来交换变量的大小首先我们用传值调用代码效果如下我们发现a和b的值并没有进行交换这是为什么呢。原因就是1.实参传递给形参的时候形参是实参的一份临时拷贝。2.对形参的修改是不影响实参的。这时候就要用到我们的指针了把变量的地址传入函数在函数中通过指针的解引用改变实参的值这就是传址调用了效果如下。成功实现了两个值的交换。我们要根据实际问题选择合适的方法。总结以上就是今天要讲的内容啦相信大家对于指针的使用又有了更深刻的理解。有什么问题欢迎大家留言讨论。

相关新闻

MelonLoader终极指南:Unity游戏模组加载器快速入门与配置

MelonLoader终极指南:Unity游戏模组加载器快速入门与配置

2026/8/18 19:40:15

MelonLoader终极指南:Unity游戏模组加载器快速入门与配置 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 你是否曾经…

Ubuntu下Unreal Engine源码集成Cesium插件编译指南与问题解决

Ubuntu下Unreal Engine源码集成Cesium插件编译指南与问题解决

2026/10/1 11:43:03

1. 项目概述与核心目标最近在Ubuntu 20.04.1上折腾Unreal Engine,想把CesiumForUnreal这个强大的地理空间插件给集成进去,结果发现这趟水比想象中深得多。如果你也打算在Linux环境下,特别是Ubuntu上,为UE引擎深度集成Cesium插件&a…

Unity入门笔记体系构建:从碎片化学习到系统化知识库

Unity入门笔记体系构建:从碎片化学习到系统化知识库

2026/8/12 19:30:59

1. 从“Hello World”到“Hello Unity”:为什么你的笔记需要重新定义如果你刚刚打开Unity Hub,看着那个新建项目的按钮,心里盘算着“今天我要学会Unity”,然后一头扎进某个教程,跟着敲了三天代码,最后发现自…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/29 22:00:59

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/10/2 14:34:27

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/30 20:35:38

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/10/3 15:21:17

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/10/4 5:19:11

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/30 8:20:32

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…