- 博客(21)
- 收藏
- 关注
原创 C 语言系统编程:标准 I/O 库函数 fopen、fputc、fgetc、fputs、fgets 详解
函数作用向指定流做格式化输出从指定流做格式化输入按块读取数据按块写入数据移动文件读写位置获取当前读写位置回到文件开头刷新缓冲区,强制写出数据删除文件重命名文件这部分内容相对独立,可以根据需要展开学习。fopenfclose负责打开与关闭文件流;fgetcfputc负责单个字符的读写;fgetsfputs负责字符串(行)的读写;配合feofferror可以精准判断读写状态;关键是要重视返回值检查与资源释放,写出健壮、可维护的系统级 C 程序。建议读者把本文示例亲手编译运行一遍,再尝试用。
2026-10-20 21:04:39
190
原创 C 语言数据结构终章:树、二叉树与哈希表
树(Tree)是由n(n >= 0)个结点组成的有限集合当n = 0时,称为空树;当n > 0时,有且仅有一个称为根(Root)的结点,其余结点可分为m个互不相交的有限集合,每个集合本身又是一棵树,称为根的子树(Subtree)。可以看出,树的定义是递归的——这也暗示了树的几乎所有操作都可以用递归优雅地实现。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;
2026-10-19 21:12:18
480
原创 链表栈队列C语言实现精解
(链表实现,天然动态)。顺序栈在嵌入式或性能敏感场景中更常见,因为内存连续且无额外指针开销。与高级语言不同,C 语言没有内置的容器类,必须手动定义结构体并管理节点的生命周期。C 语言中的链表通过结构体自引用实现。单链表是最基础的形式,双链表则增加了。是解决数组队列“假溢出”问题的标准方案。在 C 语言中,链表、栈和队列的实现高度依赖。指针以支持反向遍历,但增加了维护成本。1. 链表 (Linked List)(数组实现,需注意扩容)和。3. 队列 (Queue)2. 栈 (Stack)
2026-10-18 12:15:01
380
原创 数据结构链表全解析:单向/双向、循环/非循环、增删查与全破坏
链表通过“节点 + 指针”的方式把数据串联起来,插入、删除只需修改指针指向,不需要移动其他元素,在频繁增删的场景下优势明显。本文用 C 语言从零实现这些链表,覆盖头插、尾插、头删、尾删、按关键字删除以及链表整体销毁等全部核心操作。双向链表每个节点同时保存前驱和后继指针,可以从两个方向遍历,删除节点时无需维护“前一个节点”的额外指针。日常开发中先确认“哪个指针为 NULL”“哪个节点已经被 free”“哪里多解引用了一次”,再逐个修正。,所以头插、头删、按关键字删除都要反复判断“是不是第一个节点”。
2026-10-16 19:53:08
771
原创 数据结构入门:逻辑结构、存储结构与链表详解
刚开始接触数据结构时,很多同学容易被「逻辑结构」「存储结构」「链表」这些概念绕晕。逻辑结构描述数据元素之间的关系,存储结构描述这些关系在计算机里如何存放。而链表,正是「链式存储结构」下最常见、最基础的一种实现方式。本文假设你已经了解了数据结构的基本概念,并接触过「关系」和「存储结构」这两个词,我们重点把它们串起来,再把链表彻底讲透。
2026-10-14 09:10:41
530
原创 C语言最终篇:位运算
位运算是C语言中一种高效的操作方式,它直接对数据的二进制位进行操作。位运算在系统软件开发、嵌入式编程和性能优化中具有重要作用。
2026-10-11 16:28:18
403
原创 C语言结构体完结篇:共用体与枚举
结构体的所有成员各自占用独立的内存。共用体的所有成员共用同一块内存,同一时刻只能保存其中一个成员的值。int i;float f;上面的Data中,ifstr三个成员并不是先后排列,而是重叠存放。枚举是一种把一组相关的整型常量集中定义的方式,让代码用有意义的名字代替“魔法数字”。默认情况下,RED = 0GREEN = 1BLUE = 2,依次递增。OK = 200,LOW = 1,HIGH = 5,到这里,C 语言系列的收官内容就讲完了。共用体。
2026-10-10 11:22:15
355
原创 C语言结构体:从入门到进阶的完整指南
在 C 语言中,结构体(struct)是一种用户自定义的复合数据类型,它可以把多个不同类型的数据组合在一起,形成一个新的数据类型。例如,一个学生有学号、姓名、成绩等信息,这些信息虽然类型不同,但都属于同一个学生对象,使用结构体可以方便地统一管理。把一组相关的变量组织到一个名字下,使代码更清晰、更易维护。结构体的定义使用关键字structstruct 结构体名 {数据类型 成员1;数据类型 成员2;int y;定义结构体时,末尾的分号不能省略。int x;
2026-10-09 09:32:29
556
原创 C 语言指针最终篇章:指针数组、函数指针与二级指针
学 C 语言的路上,指针是最陡的一段坡。从最初的int *p指针数组、函数指针、二级指针。指针数组:数组里装的不是普通变量,而是一个个指针;函数指针:指针指向的不是数据,而是函数;二级指针:指针本身也有地址,于是出现了「指向指针的指针」。学完这一篇,你的指针知识体系才算真正闭环。下面我们逐个击破,再用一张图把三者串起来。至此,指针的最终篇章落下帷幕。指针数组:数组里装指针,最典型的是字符串数组,要能区分它与数组指针。函数指针:指针指向函数,让函数可以像数据一样传递,常用于回调函数与函数指针数组。
2026-10-08 21:00:44
689
原创 C语言指针超级进阶:字符与字符串数组、string 库函数原型、指针与二维数组
字符指针char *指向字符串首地址,指向的字符串常量不可修改。字符串数组:二维字符数组内容可改、定长;指针数组灵活省内存。string 库函数:牢记strlenstrcpystrcatstrcmpstrchrstrstr等原型,体会指针移动的共性,并注意缓冲区安全。指针与二维数组a[i][j]等价于;分清数组指针与指针数组int *p[n]。抓住「指针即地址、指针加减按其所指类型为单位移动」这一本质,再结合上述原型与数组结构反复练习,就能稳步跨过指针进阶这道坎。
2026-10-07 21:03:04
806
原创 C语言指针终极学习指南:从入门到精通
指针是一个变量,它存储的是另一个变量的内存地址。指针本身也有地址,也可以被其他指针指向。int a = 10;// p 存储 a 的地址// pp 存储 p 的地址地址:指针存储的是内存地址类型:指针类型决定了步长和解引用方式生命周期:动态内存需要手动管理建议通过大量编码练习来巩固,特别是链表、二叉树等数据结构的实现,是检验指针掌握程度的绝佳方式。指针不是洪水猛兽,而是 C 语言赋予你的强大工具。
2026-09-29 20:25:47
690
原创 C 语言宏与编译全过程详解:从预处理到可执行文件
宏由#define定义,本质上是一个文本替换规则。预处理器在展开宏时,不会做类型检查,也不会进行函数调用,只是机械地替换。这条命令会输出所有预定义宏和自定义宏,适合排查“宏到底有没有生效”的问题。本文梳理了 C 语言从源码到可执行文件的完整流程,并深入讲解了宏的工作原理、进阶技巧和常见陷阱。C 语言编译分为预处理、编译、汇编、链接四个阶段。宏是在预处理阶段进行的纯文本替换,不参与真正的编译与类型检查。函数宏必须注意括号、副作用和作用域三大陷阱。用于字符串化,##用于拼接标记,用于可变参数。
2026-09-28 21:04:38
607
原创 C 语言入门:函数、函数调用与递归
返回类型 函数名(参数列表) {函数体return 返回值;int:返回类型,表示函数最终返回一个整数。add:函数名,调用时使用。:形参列表,接收调用方传入的值。:把计算结果返回给调用方。如果函数不需要返回值,可以使用void类型;如果不需要参数,参数列表写void\n");递归就是函数直接或间接地调用自己。基线条件(base case):让递归停下来的终止条件。递归条件(recursive case):把问题拆成更小的同类问题,继续调用自身。
2026-09-23 21:18:56
222
原创 C 语言入门:字符数组与字符串处理全解析
字符串在 C 语言中是以'\\0'结尾的字符数组。puts输出字符串,gets输入字符串(有安全隐患,推荐用fgetsstrlen统计长度(不含'\\0'),strcpy拷贝,strcat拼接,strcmp比较。二维字符数组适合存储一组字符串,每行代表一个字符串。使用所有字符串函数前,务必保证目标空间足够,避免越界访问。掌握这些基础后,你就可以处理 C 语言中绝大多数文本场景了。建议动手把每个示例都跑一遍,并尝试修改数组容量、观察越界风险,加深理解。
2026-09-22 21:04:20
708
原创 Linux 环境下 C 语言学习第七天:数组与选择排序实战
一周的 C 语言学习过去了,循环、分支这些基础语法已经打下了底子。今天开始上强度:补齐循环的细节,正式进入数组的学习,一路写到选择排序。数组是 C 语言里非常核心的数据结构,也是后续指针、字符串、动态内存等内容的基石,这一篇把数组讲透,再用选择排序收尾。数组是同类型元素的有序集合,在内存中连续存放。类型 数组名[元素个数];// 下标从 0 开始printf("第一个元素: %d\n", scores[0]);printf("第三个元素: %d\n", scores[2]);return 0;
2026-09-20 21:02:47
146
原创 C语言三大控制结构详解
结构类型适用场景示例顺序结构按顺序执行代码直接写代码即可分支结构根据条件选择执行路径ifelse ifelseswitch循环结构重复执行某段代码forwhiledo-while通过掌握这三种结构,可以编写出功能更强大的 C 程序。在 Linux 环境下,结合命令行工具(如Ctrl+C中断程序、ps查看进程、kill终止进程),可以更好地调试和管理程序运行。
2026-09-20 00:23:54
84
原创 嵌入式 Linux 新手 C 语言第四天:函数调用与输入输出
在 C 语言里,函数是一段可以被重复使用的代码块。调用函数,就是让程序暂时跳到这段代码里执行,执行完毕后再回到原来的位置继续向下走。return 0;这里printf是函数名;括号里的是参数;末尾的分号表示这是一条完整的语句。函数名(实际参数列表);第二行把字符常量'A'传给putchar,第三行把int类型的变量number传给它。参数既可以是字面量,也可以是变量。
2026-09-17 20:49:47
238
原创 嵌入式Linux学习第三天:运算符、表达式与随机数
表达式是由运算符和操作数组成的式子。a + bx * 2 + 1a > b每个表达式都有一个值,这个值就是表达式的结果。当表达式中出现不同类型的操作数时,编译器会自动进行类型转换,这个过程叫隐式类型转换(也叫自动类型转换)。运算符与表达式:算术、关系、逻辑、赋值、位运算,重点是位运算在嵌入式中的应用转义符:掌握\n\t\\\"等常用转义符,注意嵌入式串口输出中\r\n的用法隐式类型转换:记住"向精度高的方向转换",警惕整数除法和有符号/无符号混用的陷阱产生随机数srand()设置种子 +
2026-09-16 20:25:10
127
原创 嵌入式练习生第二天:进制转换与 C 语言数据类型
数据类型 变量名 [= 初始值];// 定义整型变量并初始化// 字符变量// 浮点型变量// 双精度浮点型// 无符号整型,未初始化嵌入式编程中,建议所有变量都显式初始化。因为未初始化的变量里存的可能是“垃圾值”,读到它会让程序出现莫名其妙的问题。
2026-09-15 20:53:03
318
原创 嵌入式 Linux 练习生第一天
嵌入式 Linux 的难点不在某一条命令,而在于环节太多、反馈周期长。写代码 → 编译 → 运行。这个闭环跑通以后,再去学文件操作、进程、网络编程,以及交叉编译和开发板实操,都会有一个稳固的起点。
2026-09-14 20:26:14
178
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅