为什么说指针是c语言的灵魂?

指针,是一个让c语言初学者颤抖的坎。

为什么说指针是c语言的灵魂?

因为它提供了内存的直接控制能力,这是C语言和其它高级编程语言的关键特点之一。

基于这个特点,能衍生出非常多灵活的应用,比如内存管理、数组操作、函数参数传递、数据结构、硬件寄存器配置等等。

这样说,可能有点抽象,不要紧,我刚开始接触指针,也是这感觉。

你可以简单理解成,就像人没有灵魂,废了,c语言没有指针,也废了。

因为很多功能,没有指针实现不了

下面举几个例子:

1.硬件寄存器访问

单片机的外设功能是通过配置寄存器实现的,这些寄存器通常位于特定的内存地址,我们通常使用指针来访问这些寄存器。

2.函数参数的传递

void copyString(char *dest, char *src) {
    while ((*dest++ = *src++));
}

比如这个字符串拷贝函数,如果没有指针,字符串操作将变得非常复杂。

比如我们无际单片机特训营的项目3和项目6,项目搭载了我们自己写的一个轮询架构。

这个架构主要有个功能:任务管理调度和队列。

需要用到回调函数和参数不同文件传递,这些功能必须要用到指针。

我在2018年的时候,还特意录了一套视频,手把手用指针去实现队列,有礼貌的可以找我安排,无套路。

类似的高阶应用还有很多。

比如我们菜单实现链表这种数据结构,需要用到结构体指针。

我对指针的理解,经历了几个阶段。

刚接触时,感觉很陌生很复杂,特别是双重指针,不能完全理解,只是死记硬背了它们的定义方式。

刚做开发的前两三年,我总是感觉自己写的程序,不够专业高大上,很多程序都过度使用指针,看起来更复杂显得专业点,现在回看那程序:真傻杯,脱裤子放屁。

工作6,7年以后,独立做了一些复杂的项目,有物联网网关,有Ble产品,研究过协议栈和模块厂的SDK,也见过很多同事写的代码,对指针又有了新的理解。

第一次做这种项目时,功能太多了,完全Hold不住,可能某几个功能能实现,但把整个项目代码组织整合在一起,就会有各种各样的问题。

我攻克这个难关,花了好几年时间,因为它不像单片机的问题,网上都有答案,也有例程参考,这种问题,是开发经验的问题,网上找不到资料,有也只是零零散散的。

当时,我就像捡垃圾一样,协议栈捡一点,同事那里捡一点,网上又捡一点,然后慢慢消化实践,最后形成系统的知识体系。

其实复杂项目做不稳定,问题的本质,就是缺失程序架构设计和模块化编程能力

每个功能设计成模块化,然后让一个系统(RTOS),或者我们自己写的那个轮询架构,去统一管理指挥各模块功能执行,就形成了整个项目的软件架构。

而要实现可扩展性,可移植性强的程序架构,指针绝对是绕不开的坎。

所以,我认为,指针是普通工程师和高级工程师的一道鸿沟,搞不定指针,你就无法进阶到高级工程师。

搞定指针,不仅仅是会定义,会使用。

而是对指针的理解深度,能灵活使用它去做一些高阶应用,解决实际产品开发的痛点。

有时,我和无际单片机项目特训营的铁子开玩笑说,如果我当时能碰到这些项目就太爽了,少走好几年弯路。

因为项目3和项目6整体的程序架构,以及每个功能的模块化设计,用指针去实现这些设计的高阶技巧,都是我们自己摸索了很久,才总结出来的经验。

跟着我们教程,参考我们思维和代码,把项目功能从头到尾完整做一遍,对程序架构以及模块化编程的理解,就比较系统了。

如果你是做单片机开发,可能工作了10年,也理解不了指针的精髓,本质上,和工作年限无关,和你接触的项目体量有关。

如果独立做过复杂的项目,绕不开程序架构的需求,也就绕不开指针的应用。

碰到这种瓶颈时,如果有参考,有人带,就会提升地很快,反之,需要耗费很多时间摸索。


最近很多粉丝问我单片机怎么学,我根据自己从业十年经验,累积耗时一个月,精心整理一份「单

片机最佳学习路径+单片机入门到高级教程+工具包」全部无偿分享给铁粉!!!

除此以外,再含泪分享我压箱底的22个热门开源项目,包含源码+原理图+PCB+说明文档,让你迅速进阶成高手

教程资料包和详细的学习路径可以看我下面这篇文章的开头

单片机入门到高级开挂学习路径(附教程+工具)

单片机入门到高级开挂学习路径(附教程+工具)

单片机入门到高级开挂学习路径(附教程+工具)

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值