深度理解指针2
1. const修饰指针变量是可以修改的如果把变量的地址交给⼀个指针变量通过指针变量的也可以修改这个变量。 但是如果我们希望⼀个变量加上⼀些限制不能被修改怎么做呢这就是const的作⽤。上述代码中n是不能被修改的其实n本质是变量只不过被const修饰后在语法上加了限制只要我 们在代码中对n就⾏修改就不符合语法规则就报错致使没法直接修改n。如果我们直接通过地址来修改n的值呢可以看到通过指针指向的地址进行修改是可以修改成功的虽然这违反了语法但是确实是修改了值用const修饰就是为了防止被修改既然可以修改那我们有什么办法让即使通过地址也不能进行修改呢1.1 const修饰指针变量⼀般来讲const修饰指针变量可以放在*的左边也可以放在*的右边意义是不⼀样的。我们来分析一下后面这两种情况const修饰的是pb指针变量pb指向的b地址不能改变但是无法约束*p指向的b的值。const在*左边修饰*pb*pb指向的b不能改变但是pb指针变量可以改。总结2. 野指针概念野指针就是指针指向的位置不明随机的、不正确的、没有明确限制的。2.1 野指针的成因2.1.1 指针未进行初始化因为未进行初始化导致指针变量默认为随机值。2.1.2 指针越界访问数组只用10个空间指针指向的范围却有11个空间导致生成野指针。2.1.3 指针指向的空间释放这里的n为局部变量局部变量出函数及销毁所以返回的地址是无效的也就是指针指向的空间被释放了。这就是导致野指针的三个原因。2.2 如何规避野指针2.2.1 初始化指针如果明确知道指针指向哪⾥就直接赋值地址如果不知道指针应该指向哪⾥可以给指针赋值NULL. NULL 是C语⾔中定义的⼀个标识符常量值是00也是地址这个地址是⽆法使⽤的读写该地址 会报错。2.2.2 小心指针越界一个程序向内存申请了那些空间通过指针也就只能访问那些空间不能超出范围使用超出就是越界。2.2.3 指针使⽤之前检查有效性当我们通过指针变量访问地址时使用后如果后期我们不在使用这个指针来访问我们可以及时将指针变量置为NULL因为规定只要是NULL指针就不去访问 同时使⽤指针之前可以判断指针是否为NULL。2.2.3 避免放回局部变量地址局部变量的生命周期短出函数就销毁了不要返回局部变量的地址。3. assert断言assert.h 头⽂件定义了宏 assert() ⽤于在运⾏时确保程序符合指定条件如果不符合就报 错终⽌运⾏。这个宏常常被称为“断⾔”。很显然assert并没有报错而是继续运行下去了断言符合这里可能有个疑问为什么if中还要有个return语句这个是终止main函数防止后面的*p100执行空指针是不能读写的。看图可能会有人问其中的debug是什么意思我们在vs编译器中上面就有个debug还有个release这对应两个版本一个是调试版本一个是发布版本一个是给我们程序员开发使用的一个是给顾客使用的。3.1 assert的好处它不仅能⾃动标识⽂件和 出问题的⾏号还有⼀种⽆需更改代码就能开启或关闭 assert() 的机制。如果已经确认程序没有问 题不需要再做断⾔就在 #include 语句的前⾯定义⼀个宏 NDEBUG。宏的概念我们后续再说当代码又出问题之后可以将宏给注释掉在进行编译。4. 数组名的理解我们在之前对数组名有着浅薄的认知现在学习指针了该进行深度的理解了。我们前面说过数组名等于首元素地址现在我们来验证一下我们发现打印的是一样的可见数组名就是数组⾸元素(第⼀个元素)的地址。用刚才的道理来理解接下来的这串代码你就会发现又有些不对。按刚刚学的数组名是首元素的地址应该输出4才对为什么会输出40呢其中就是有两个例外除了这两种特例之外其他的都是数组名就是首元素的地址你运行输出arr和arr之后你会发现他们的输出结果是一样的那他们到底有什么区别呢这里的C指的是12前面进制的时候有讲过我们从arr1和arr1就可以明显看出区别虽然两个值是一样的但是意义有所不同。

相关新闻

从星号梯形到循环控制:编程入门项目的深度解析与实践

从星号梯形到循环控制:编程入门项目的深度解析与实践

1. 从“画星星”到理解循环控制:一个被低估的编程入门项目很多编程新手在接触循环结构时,都觉得“画个星号梯形”这种题目太简单、太“小儿科”了,无非就是几个for循环嵌套,打印一堆*和空格。我刚开始学编程时也这么想&#xff0c…

2026/11/3 1:52:45 阅读更多 →
照片视频丢失不要急!北京德智康多媒体素材数据恢复

照片视频丢失不要急!北京德智康多媒体素材数据恢复

照片视频丢失不要急!北京德智康多媒体素材数据恢复摄影师、短视频创作者、家庭用户的硬盘、存储卡里存放大量照片、原始视频素材。格式化存储卡、硬盘损坏、素材误删除,丢失的影像资料很难重新拍摄,损失难以估量。多媒体文件碎片多&#xff0…

2026/11/1 8:36:09 阅读更多 →
Godex ECS性能优化实战:从45帧到120帧的架构调优指南

Godex ECS性能优化实战:从45帧到120帧的架构调优指南

1. 项目概述:为什么ECS优化能让游戏性能飙升?如果你正在用Godex(Godot引擎的ECS框架)开发游戏,却总觉得帧率上不去、卡顿频繁,或者面对复杂场景时性能捉襟见肘,那你来对地方了。我最近刚把一个基…

2026/10/28 3:22:29 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/3 1:09:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/2 10:46:11 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/2 10:47:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/2 1:16:51 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/2 10:46:31 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/2 10:46:26 阅读更多 →

日新闻

周新闻

月新闻