C 语言教程 —— 学会 C 语言,构建自我 C 语言体系

写在教程之前

本教程的目标是从零开始(手把手教会搭建环境)到精通 C 语言, 构建自己的 C 语言知识体系。
真正的工程师经验来自项目堆砌和自我踩坑, 而不是靠教程学习。师傅领进门, 修行靠个人。

本教程的核心理念:

  1. 面向底层 — C 语言是距离硬件最近的高级语言。本教程大量涉及汇编层面、内存布局、指针本质、系统调用等底层话题。每个关键概念都会从”CPU 看到了什么”的角度进行剖析。
  2. 向上延伸 — C 语言是 C++ 的基石。理解 C 的指针、内存管理、结构体后, 再学 C++ 的 this 指针、虚表、智能指针会豁然开朗。教程在合适位置提供指向 CPP教程 的链接。
  3. 视野开阔 — 本教程第四部分”内核”将读者引入操作系统内核的世界, 理解 C 语言在系统工程中的核心地位。同时, 数据结构部分与根 DSA学习路线 配合, 从底层内存布局理解每种数据结构的本质。
  4. 系统化思考 — 希望读者带着辩论态度阅读。题目和概念交错排布, 题目的目的就是启发思考。如果发现题目不会, 回去重新想想。
  5. 善用工具 — 不反对也不鼓吹 AI。自我思考是第一要务, AI 辅助。推荐读者旁边开着 AI, 遇到不懂的问题先自己对 AI 解释看法让其纠正。

C 语言教程结构

c语言教程/
├── c目录.md                ← 你在这里
├── 1入门/                   零基础起步: 环境搭建 → 语法基础 (10 章)
├── 2深化/                   底层视角: 指针, 内存, 汇编, OOP-in-C (9 章)
└── 库大全/                  C 标准库 + 第三方库 分类索引
│   ├── 容器类库/            动态数组/链表/栈/队列/哈希表/树/图
│   ├── 功能类库/            stdio/stdlib/string/math/time/调试/控制流
│   └── 第三方库/            数据结构/网络/加密/压缩/数据库/JSON/GUI/测试/并发

推荐学习路线

1入门(01→10) → 2深化(01→09) → 库大全(按需查阅) → 根数据结构与算法技巧
       |              |                |
       ▼              ▼                ▼
    环境+语法      内存+指针       标准库+第三方库

同时, 建议在学习 C 的过程中关注 CPP教程 的对应章节, 理解 C 和 C++ 在设计理念上的差异与联系。


第一部分: 1入门/ — 从零开始

#章节核心内容
0101_环境配置GCC/Clang 安装, 不同系统配置, Makefile/CMake 入门, GDB 调试
0202_第一个C程序main 函数, printf, 编译四步骤, 返回值, 注释
0303_变量与数据类型int/float/char, signed/unsigned, 类型转换, 常量, 作用域
0404_运算符与表达式算术/关系/逻辑/位运算, 优先级, 三目运算符, sizeof
0505_条件语句if/else/switch, 短路求值, 常见陷阱
0606_循环结构for/while/do-while, break/continue, 循环优化
0707_函数声明/定义, 参数传递, 递归, 作用域, static 函数
0808_数组一维/多维数组, 变长数组, 越界问题, 数组与指针初步
0909_字符串C 风格字符串, 字符数组, string.h 函数族, 格式化输入输出
1010_结构体与联合体struct/union/enum, typedef, 内存对齐, 位域

第二部分: 2深化/ — 底层视角

核心理念: C 语言的真正力量在于让你看到”铁皮之下的东西”。第二部分从内存、汇编、硬件的角度重新审视 C 语言每个特性。

#章节核心内容
0101_指针深度剖析指针本质, 多级指针, const 指针, void*, 指针运算, 数组与指针
0202_内存模型与布局虚拟地址空间, .text/.data/.bss/堆/栈, 内存对齐, 端序
0303_动态内存管理malloc/free/realloc/calloc, 内存泄漏, valgrind, 内存池
0404_函数指针与回调函数指针, 回调机制, qsort, 信号处理, 函数指针数组
0505_位运算与硬件操作位域, 掩码, volatile, 内存映射 IO, 内联汇编
0606_编译链接与ELF预处理/编译/汇编/链接, ELF 格式, 符号表, 动态/静态链接
0707_面向对象C编程用 C 实现封装/继承/多态, 虚函数表手写, 内核 OOP 实践
0808_标准库深度stdio/stdlib/string 底层实现, 缓冲区机制, 系统调用关系
0909_多文件与模块化.h/.c 分离, static/extern, Makefile, 链接器脚本基础

C 与 C++ 的交叉学习

C 深化章节建议同步阅读的 C++ 内容
01_指针深度剖析[[../ISSUES
03_动态内存管理[[../ISSUES
07_面向对象C编程[[../ISSUES
08_标准库深度[[../ISSUES

库大全参考

类型索引文件说明
容器类库[[../ISSUES容器类库索引]]
功能类库[[../ISSUES功能类库索引]]
第三方库[[../ISSUES第三方库索引]]

第三部分: 库大全/

C 语言的”标准库”其实很小 — 这正是 C 的特点。真正常用的第三方库才是日常开发的支柱。

容器类库

章节说明
[[../ISSUES容器类库索引]]

功能类库 (<stdlib.h> <stdio.h> <string.h> 等)

头文件说明
<stdio.h>FILE, fopen, fprintf, fread, 缓冲区模式
<stdlib.h>malloc, atoi, qsort, bsearch, exit
<string.h>memcpy, memmove, memset, strlen, strcmp
<math.h>sin, cos, sqrt, pow, fabs
<time.h>clock, time, localtime, strftime
<assert.h>assert 调试宏
<errno.h>errno 错误码, perror

第三方库

领域推荐库说明
数据结构uthash, klib, GLibC 缺少 STL, 这些库填补空白
网络libcurl, libwebsockets, libuvHTTP 客户端, WebSocket, 事件循环
加密OpenSSL, libsodium, mbedtlsSSL/TLS, 哈希, 加密算法
压缩zlib, liblzma, zstd数据压缩
数据库sqlite3, libpq, hiredisSQLite, PostgreSQL, Redis 客户端
测试Unity, CMock, CheckC 单元测试框架
JSONcJSON, jansson, yyjsonJSON 解析
图形raylib, SDL2, cairo2D 游戏/图形渲染

与数据结构/算法技巧的关系

C 语言教程中的 3数据结构/ 目录是 C 语言实现参考, 主要学习路线请参考 DSA学习路线。此处提供各数据结构在 C 语言中的底层手动实现(指针操作、动态内存管理), 帮助你理解数据结构的本质。

说明: 本教程 3数据结构/ 为 C 语言实现参考。数据结构的系统学习方法、习题和进阶内容, 请以 DSA学习路线 为主线。

根数据结构主题C 语言底层参考
[[../ISSUES
链表[[../ISSUES
哈希表[[../ISSUES
[[../ISSUES
[[../ISSUES
[[../ISSUES

配套资源

模块入口
学习路径[[../ISSUES
数据结构[[../ISSUES
C→C++[[../ISSUES
C++ 教程[[../ISSUES
内核思想[[../ISSUES
汇编基础[[../ISSUES