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

    文章

    7642

    浏览量

    144735
  • 函数
    +关注

    关注

    3

    文章

    4408

    浏览量

    66953
  • 变量
    +关注

    关注

    0

    文章

    615

    浏览量

    29389

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

    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

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

    改变程序的执行流程,使代码更加灵活和可控。本文将详细介绍这些语句的作用及其应用场景,并通过示例代码进行说明。Part.1break语句C语言中break语句两种
    的头像 发表于 04-29 18:49 1770次阅读
    深入<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

    丢数据比丢钱还让人头疼,遇到过吗?

    发生在产品运行现场频繁数据写入的情形,特别是在使用了数据库的时候。一般以下表现:轻微表现:数据库最新记录的数据项无故丢失;比较严重情况:较多记录项数据丢失;严重
    的头像 发表于 04-18 11:36 546次阅读
    丢数据比丢钱还让人头疼,<b class='flag-5'>你</b><b class='flag-5'>遇到过</b>吗?

    Modbus TCP通信的那些坑!遇到过几个?

    凌晨三点,产线骤停!触摸屏疯狂报通讯超时,老板夺命连环Call轰炸,而你盯着PLC的Error灯狂闪、仪表数据集体躺平——Modbus TCP的坑,谁踩谁懂! 别慌!这篇Modbus TCP常见问题总结,手把手教你逆袭甩锅。Modbus TCP常见问题主要包括连接建立、错误代码识别、数据处理和地址冲突等。 以下是一些常见问题的解答: 问题一: 如何判断Modbus TCP连接是否建立? 答:进行Modbus TCP通信,需要建立连接,对于S7-200 Smart CPU作为Modbus TCP客户端时,可以通过mbus_client指
    的头像 发表于 04-16 17:17 1170次阅读
    Modbus TCP通信的那些坑!<b class='flag-5'>你</b><b class='flag-5'>遇到过</b>几个?

    FPGA学习笔记

    线网类型表示硬件电路元件之间实际存在的物理连线,很多种:wire、tri、wor等等,当然日常使用wire最多,其他的都没遇到过
    的头像 发表于 03-27 09:34 1249次阅读
    FPGA学习笔记

    为什么学了C语言,却写不出像样的项目?

    在学习编程的路上,C语言几乎是每个程序员的“必修课”。不管你是打算从事嵌入式开发、系统编程,还是想要深入理解操作系统的底层原理,C语言都是一
    的头像 发表于 03-14 17:37 700次阅读
    为什么学了<b class='flag-5'>C</b><b class='flag-5'>语言</b>,却写不出像样的项目?

    那些让电子工程师绝望的问题,遇到过吗?

    这个话题,相信咱们电子工程师们都有话说,评论区见,让我们吃(开)吃(开)瓜(眼)~我先提一个:最近一个朋友很崩溃,因为他要修几百张损坏的板子,还坏得各不相同:板子铺铜短路的,一堆485是假的,
    的头像 发表于 12-25 17:33 680次阅读
    那些让电子工程师绝望的问题,<b class='flag-5'>你</b><b class='flag-5'>遇到过</b>吗?