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语言
    +关注

    关注

    180

    文章

    7596

    浏览量

    135988
  • 函数
    +关注

    关注

    3

    文章

    4299

    浏览量

    62350
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28315

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

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

收藏 人收藏

    评论

    相关推荐

    技术干货驿站 ▏深入理解C语言:掌握常量,让的代码更加稳固高效!

    C语言的世界中,常量是一种不可忽视的元素。无论是在编写简单的代码,还是构建复杂的系统,常量都能为的程序带来更高的稳定性和可靠性。在这篇文章中,我们将深入探讨
    的头像 发表于 08-29 13:59 2701次阅读
    技术干货驿站 ▏深入<b class='flag-5'>理解</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>:掌握常量,让<b class='flag-5'>你</b>的代码更加稳固高效!

    按照这样学习C语言,成为卷王不是梦!

    一些学习C语言的建议,让你在学习之路上更加游刃有余,成为C语言的高手。按照这样学习C
    的头像 发表于 07-06 08:04 280次阅读
    按照<b class='flag-5'>这样</b>学习<b class='flag-5'>C</b><b class='flag-5'>语言</b>,成为卷王不是梦!

    RK3588 在使用rockit接口设置vo时,UI消失,大家遇到过吗?

    。RK_MPI_VO_GetPubAttr这个接口返回值为0. 具体代码如图: 代码为demo代码 test_mpi_vdec.cpp 日志如下: 继续执行解码输出,视频可以显示。大家遇到过这种情况吗?
    发表于 06-11 17:59

    语言模型(LLM)快速理解

    自2022年,ChatGPT发布之后,大语言模型(LargeLanguageModel),简称LLM掀起了一波狂潮。作为学习理解LLM的开始,先来整体理解一下大语言模型。一、发展历史大
    的头像 发表于 06-04 08:27 881次阅读
    大<b class='flag-5'>语言</b>模型(LLM)快速<b class='flag-5'>理解</b>

    关于STM32CubeMX FatFs遇到的问题求解

    () 和 osSemaphoreWait()函数, 这两个函数在CMSIS V1 中有定义,但我在CubeMX中选择CMSIS V2 为啥syscall.c 中还是使用了 v1 的函数,有没有人遇到过,望能指点一下。 感谢!
    发表于 04-09 07:39

    帮你避雷 C语言所谓的短路现象~

    C语言短路现象算是C语言的基础吧,不过有时候代码写得不规范也容易引入一些bug,所以这些操作在工程师实践中尽量少用。虽然下面找的例子比较简单,但如果后面是其他表达式,或许
    的头像 发表于 03-27 08:09 384次阅读
    帮你避雷 <b class='flag-5'>C</b><b class='flag-5'>语言</b>所谓的短路现象~

    基于星闪技术的解决方案正为国内智能家居互通互联带来新的生机

    你家里多少个遥控器?遇到过分不清机顶盒还是电视遥控的情况吗?如果也尝试过电视的K歌功能,有没有遇到麦克风断连,或出现杂音的情况呢?
    的头像 发表于 03-22 16:11 1154次阅读

    STM32WL55JC例程代码中的APP_LOG()是否能理解为串口打印?

    看历程带代码时看到这个函数,以前都没遇到过 时否可以理解为串口打印
    发表于 03-13 08:07

    CY7C68013A-56BAXC FPGA运行2,3分钟后上位机卡死了怎么解决?

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

    plc编程语言c语言的联系 c语言和PLC什么区别

    语言,主要用于开发各种应用程序。尽管PLC编程语言C语言一些相似之处,但它们之间也存在一些明显的区别。 首先,PLC编程
    的头像 发表于 02-05 14:21 3794次阅读

    HIGHTEC创建工程导入iLLD遇到的疑问求解

    IFX_INTERRUPT_INTERNAL#define IFX_INTERRUPT_INTERNAL(isr, vectabNum, prio) 遇到过的吗?主要是那一段汇编引起的
    发表于 02-05 08:00

    芯片烧坏时发生了什么?为什么总是VDD短路?甚至封装开裂冒烟?

    相信大家在MCU调试和生产测试阶段遇到过这样的情况,芯片发烫不工作,甚至芯片冒起一阵青烟
    的头像 发表于 01-19 10:34 3169次阅读
    芯片烧坏时发生了什么?为什么总是VDD短路?甚至封装开裂冒烟?

    defer的这些坑,遇到过吗?

    结论:延迟函数 fmt.Println(a) 的参数在 defer 语句出现的时候就已经确定下来了,所以不管后面如何修改 a 变量,都不会影响延迟函数
    的头像 发表于 12-01 09:28 356次阅读

    c语言gets函数可以输入数字吗

    C语言中的gets函数是用来读取字符串的,而不是用来读取数字的。它会读取输入的字符直到遇到换行符或者文件结束符。因此,如果尝试使用gets函数来读取数字,是无法准确获取数字本身的。
    的头像 发表于 11-24 10:00 1411次阅读

    通过电路符号认知N沟道和P沟道MOSFET的工作原理

    硬件面试中有遇到过这样的事吗?通常让画一个增强型的MOSFET,或是N沟道MOSFET或是P沟道MOSFET
    的头像 发表于 11-21 15:05 1840次阅读
    通过电路符号认知N沟道和P沟道MOSFET的工作原理