0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

你有遇到过像我这样理解C语言的吗?

巧学模电数电单片机 来源:巧学模电数电单片机 作者:巧学模电数电单片 2022-11-24 14:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今天我讲一下我个人对C语言的认识以及自己的理解,若有错误,还望指出,不甚感激。

首先是C语言整体的脉络,C语言包括哪些东西?哪些部分需要着重理解?这是我经常问自己的两个问题。

01 基础性知识

最基本的一些数据类型及其所占用的内存大小,还有一些基础的计算机常识,比如进制转换等,这些东西在对C语言有了一定的了解后都是比较容易的。

02 三种逻辑:顺序、选择和循环

顺序语句:就是从上到下没有判断,一步到底的语句。

选择语句:就是if和switch语句,在特定的场合,switch语句使用会使程序看的简单明了,尤其是选择情况较多的时候,大多数时候if语句用的多一点。

循环语句:就是while、do...while和for语句。

while语句和for语句用的场合非常多,我说一下几个注意点:

在多层循环中,尽可能把最长的循环放在最外围,节省cpu的资源。

不能在循环体内修改循环变量,防止循环失控。

循环尽可能的短,太多行的循环代码会大大的影响阅读。解决方法:使用子函数处理。

把循环嵌套控制在3层以内,超过三层,对代码的理解难度大大增加了。

for语句的控制表达式不能包含任何浮点类型的对象。

还有就是break和continue语句,经常会有人问我,这两个关键字跳出的是什么?

break是跳出离它最近的一个循环,switch中的是跳出switch,不是跳出循环,continue也是一样。

03 数组和指针

数组我把它分为两个:普通数组和字符串。

其中对字符串的操作就是C语言考核的最关键的一步,因为其涉及到了数组和指针,把字符串操作的很牛的人,他们对指针的理解一定很深。

普通数组:一维数组的内容不是太多,但是对算法的要求比较高,最基础的是一定要会冒泡和选择排序,这两种算法最基础,但也是在排序上用的最多的。

如果会更好的算法的话另外谈,有兴趣的话可以对算法这一块深入研究。

二维数组的话,要理解其内存的分配情况,元素的存放顺序,会对二维数组进行输入输出,其他的就是算法了,以后慢慢去研究去。

字符串:字符串这部分的话,因为C语言对字符串的操作不像c++那么容易,所以,要对指针和数组这块下一点功夫。

最简单的就是将string.h库函数中的strlen、strcmp、strcpy、strncmp这几个函数自己实现一篇,使用指针的方式。

指针:当初老师讲指针的时候,说了一句,如果你把指针学会了,C语言你就掌握了70%。

当初我还有些怀疑,现在的我十分赞同这句话。

指针就是C语言的精华所在,C语言是一门软硬通吃的语言,归根到底就是这个指针的知识,他能直接操控底层。

关于指针,我印象最深的是那个例子,*p 把p想象成小明家的门牌号,而*则是一把万能钥匙,*p代表的值就是小明本人,你可以把小明家的地址给别人,别人拿着*(万能钥匙)和p(小明家门牌号)就能去看小明本人,可以对小明本人进行操作。

这个例子当时给我的印象非常深,那以后我感觉我对指针的理解顿时清楚了很多,非常感谢我的C语言启蒙老师,有了他的带领,我才能对C语言有深一步的理解。

04 函数

函数的话,我感觉就是main函数的一个延伸,但它是可重复调用的,你可以把一些繁杂的步骤写到一个函数里面,这样main函数才不会显得太臃肿。

函数最重要的就是它的格式,返回值+函数名+(形参)+函数体,其中有一个容易忽视的点就是,当形参是一个指针的时候,在函数开始时,要进行入口参数检查,就是对指针是否为空进行判断,要不然容易出现段错误。

还有一个就是,如果一个函数在main函数下面,最好进行一下声明,虽说现在的编译器已经帮我们省略了这一步骤,但我们还是要养成良好的习惯,毕竟如果给你一个旧版本的编译器的话,就会报错。

编译器的优化并不是我们偷懒的理由,不过我们也可以将函数写在main函数上方,这样的话就不需要考虑这个问题了。

05 关键字

Static全局变量:作用范围局限于源文件,不可被源文件的其他文件使用。

局部变量:局限于特定函数,出作用域不释放,函数结束后依然存在。

函数:作用范围局限于源文件,不可被源文件的其他文件使用 函数名在其它文件不可见。

const:这个关键字其实只要记住一局诗:近水楼台先得月!最靠近const的那个就是不能变的。

extern:这个关键字一般是用在.h头文件中,声明函数,不是本文件中的。

struct:结构体,包含多种数据类型的变量,在数据结构中经常用到,比如说:链表、栈和队列等。

enum枚举:和define的功能差不多,枚举和宏其实非常类似,宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。

union共用体:和结构体的结构差不多,但是结构体的各个成员会占用不同的内存,互相之间没有影响。

而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员,一般用来测试系统的大小端。

到这边,C语言的内容其实就差不多了,除了其他一些零零碎碎的小知识点。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7646

    浏览量

    146126
  • 函数
    +关注

    关注

    3

    文章

    4421

    浏览量

    67826
  • 变量
    +关注

    关注

    0

    文章

    616

    浏览量

    29566

原文标题:学生时代,你有遇到过像我这样理解C语言的吗?

文章出处:【微信号:巧学模电数电单片机,微信公众号:巧学模电数电单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TMC260C-PA 为什么适配的步进电机需求?

    有没有遇到过这些小麻烦:打印机打印时总有些微卡顿,实验室的液体处理设备精准度差了一点点,工厂里的电机运行久了电费单有点“刺眼”?其实,这些问题背后,可能就差一个靠谱的步进电机驱动芯片——比如
    的头像 发表于 02-04 15:18 263次阅读
    TMC260<b class='flag-5'>C</b>-PA 为什么适配<b class='flag-5'>你</b>的步进电机需求?

    Debian系统中如何修改dns?

    在调试WIFI的过程中,不知是否遇到过这样的现象,WIFI可以连上ap,可以局域网内相互ping通,但是ping不通外网。
    的头像 发表于 01-30 17:49 2742次阅读
    Debian系统中如何修改dns?

    这些 “听不清” 的尴尬,是否也遇到过

    AN-93双麦降噪远场拾音模块通过三大核心优势解决"听不清"痛点:1)36dB深度降噪,智能过滤人声与噪音;2)7米远场+360°拾音,适配多种距离场景;3)灵活集成设计,低功耗、易安装。该模块可广泛应用于办公教育、智能家居、安防监护及工业领域,显著提升语音交互体验。其出色性能和人性化设计,既能优化用户体验,又能降低开发者研发成本,是各类
    的头像 发表于 11-14 09:49 484次阅读
    这些 “听不清” 的尴尬,<b class='flag-5'>你</b>是否也<b class='flag-5'>遇到过</b>?

    C语言和单片机C语言什么差异

    语言的功能特性外,它可以很好的操作底层的硬件接口。在C语言的基础上,如果把一些单片机的端口或特殊功能寄存器加于定义,使用的时候会更加方便,写语句的时候,直接直观的编写。
    发表于 11-14 07:55

    STM32+DP83848跑10M可以,100M丢包很严重,请问有人遇到过吗?

    大佬们,stm32驱动dp83848,跑10M可以,100M丢包很严重,请问有人遇到过
    发表于 08-20 10:04

    基于恩智浦RW612三频无线MCU的空调语音控制解决方案

    在家居生活中,一定遇到过这样的“痛点”——传统空调遥控器操作繁琐,且每个空调对应着不同的遥控器,容易彼此混淆、难以配对,这样的困境对于年长的用户来说会显得更为突出。因此,为家电添加智
    的头像 发表于 08-19 14:21 5067次阅读

    TCS4512:电力界的“瘦身教练”,18V/2A还能这么省!

    各位电子界的朋友们,有没有遇到过这样的烦恼——的电路板越来越胖(功耗高),而电源管理芯片却还在“躺平”(效率低)?
    的头像 发表于 07-05 11:26 566次阅读
    TCS4512:电力界的“瘦身教练”,18V/2A还能这么省!

    无线通信中信号衰落的影响因素和测试解决方案

    是否遇到过这样的场景:明明手机信号满格,视频却卡成PPT?Wi-Fi路由器近在只尺,网速却堪比蜗牛?
    的头像 发表于 06-27 15:14 3686次阅读
    无线通信中信号衰落的影响因素和测试解决方案

    工业人必读!USB对比PCIE延迟分析,选错接口可能多花50%成本!

    有没有遇到过这种情况:传感器数据延迟、工业设备控制卡顿、高清视频采集画面有延时,明明设备都接上了,怎么感觉反应慢一拍?别急,很有可能是在“USB对比PCIE延迟”这个关键点上,没选对接口!
    的头像 发表于 05-30 11:13 3042次阅读
    工业人必读!USB对比PCIE延迟分析,选错接口<b class='flag-5'>你</b>可能多花50%成本!

    CY7C68013A-56BAXC FPGA运行2,3分钟后上位机卡死了,是什么原因?

    请问一下是否遇到过这样一个问题,FPGA运行2,3分钟后上位机卡死了。频率用的48M,每包512Byte。这种情况下该如何去排除问题。
    发表于 05-30 08:22

    在使用PTR5415蓝牙模块中有遇到哪些测试问题?欢迎分享实测案例

    在使用蓝牙模块PTR5415的小伙伴们吗?在应用中遇到过哪些测试问题?欢迎分享实测案例
    发表于 05-09 14:32

    在使用WI-FI6模块PTR7002时遇到过哪些通信问题?欢迎分享解决方案!

    在使用WI-FI6模块PTR7002时遇到过哪些通信问题?欢迎分享解决方案!
    发表于 05-09 14:25

    服务器CPU架构解析,从x86到ARM:一文吃透其分类及对应品牌优势

    为什么的服务器总在"喘气"?CPU架构才是关键。大家可能都遇到过这样的情况:公司刚采购的服务器用了不到半年,跑个数据库就像老牛拉车,加内存换硬盘都没用。这时候老工程师会叼着烟告诉
    的头像 发表于 04-30 15:11 2175次阅读
    服务器CPU架构解析,从x86到ARM:一文吃透其分类及对应品牌优势

    深入理解C语言C语言循环控制

    改变程序的执行流程,使代码更加灵活和可控。本文将详细介绍这些语句的作用及其应用场景,并通过示例代码进行说明。Part.1break语句C语言中break语句两种
    的头像 发表于 04-29 18:49 2209次阅读
    深入<b class='flag-5'>理解</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>:<b class='flag-5'>C</b><b class='flag-5'>语言</b>循环控制

    cyUSB3014一直显示2.1,不能到3.0情况,谁遇到过

    我们做了两款设备,一款USBA的输出为3.0,另外一款电路只改了连接器TYPEC,一直显示2.1,同样的固件,拆掉type-C的连接器电线连接USBA连接器还是不能显示3.0,ESD也是连接的,请问谁遇到过
    发表于 04-29 18:47