前置
📔 [大一秋冬] C小程 琐碎知识点整理
我个人认为《C大程》和《C小程》最明显的区别在于《C大程》开始以工程为编写目标,体现在多文件多模块的常态化。所以在此之前你需要了解单文件单模块的一些知识,才能进一步理解《C大程》中的一些知识点和工程规范。
此外,《C大程》或许更侧重一些抽象的,思维、规范上的内容,而《C小程》更侧重语法。所以有些东西即使是在《C大程》才重点涉及的语法知识我也会放到《C小程》的文档中。
想不出标题的放这里
一个 C 的多模块项目一般包括若干匹配的.h
和.c
文件。
从封装的角度来理解,.h
文件是对外开放的接口声明,.c
则是整个模块真正的内容所在。在编译链接过程中,为了防止出现重复声明,我们一般用如下形式来使该接口文件只被加载一次:
#ifndef __MY_LIB_NAME__
#define __MY_LIB_NAME__
// Your codes are supposed to be here.
#endif
比起传结构体,我们更倾向于传内存更小的结构体的指针,否则在进入函数的时候,结构体会被 copy 而且我们无法在函数里更改原结构体的内容。
结构体的定义中无法设置初始值。
static
关键字的内容可以看
- 静态变量与静态函数无法被其他模块调用
抽象数据结构
queue / 队列
- FIFO: First In First Out
- c’tor() / d’tor() / enqueue() / dequeue() / length()
stack / 栈
- LIFO: Last In Fisrt Out
- c’tor() / isEmpty() / push() / pop()
(single/doubly) linked list / (单/双)链表
- 与数组对比的优劣
- 注意内存管理
递归
recursion / 递归
Recursive solution have the same form as the original problem.
函数指针
- 函数指针
- 函数指针数组
事件驱动与回调函数
在libgraphics
的使用说明中有
其他资源
:::info