引言:先建立模型,再学习语法
2026/6/29大约 4 分钟
很多入门教程从下面这段模板开始:
#include <stdio.h>
int main() {
return 0;
}
然后要求你先记住:#include 是包含头文件,main 是主函数,return 0; 表示正常结束。这样当然也能写出程序,但学习者很容易长期停留在“我知道应该这么写,却不知道每一步解决了什么问题”的状态。
这套教程,我们换一种思路:先给出足够准确的心智模型,再引入语法。每个新概念我们都需要搞清楚四个问题:
- 它要解决什么问题?
- 程序运行时大致发生了什么?
- 为什么要这样写,而不是换一种写法?
- 哪些边界和错误最容易被忽略?
但是,实际的计算机系统比我们想象的复杂。即使是最简单的程序,也可能涉及编译器、链接器、操作系统、CPU、内存和外设等多个层次。为了让学习者在有限时间内建立起可用的模型,我们会在每篇文章里只关注一个更加简化的模型,通过给出一个最小示例,帮助你理解概念和语法。
教学路线
整套教程共 70 篇,分成十一阶段:
- 程序如何变成可执行文件:环境、编译、汇编、链接,以及源代码和机器执行之间的关系。
- 值、类型与控制流:变量、内存模型、输入输出、运算符、类型转换、分支和循环。
- 函数与程序组织:参数、作用域、预处理、多文件编译和 C 标准库。
- 连续内存与文本:一维数组、二维数组、字符数组,并通过第一个项目把基础语法连起来。
- 地址、资源与外部数据:指针、动态内存、所有权、内存安全、文件、命令行、错误传播和测试。
- 复合数据与 C 风格抽象:结构体、结构体指针、接口封装,并完成可保存的通讯录项目。
- 数据结构与算法:复杂度、动态数组、链表、栈、队列、排序、查找、递归、树、堆、哈希表和图。
- 搜索与综合应用:Trie、并查集、DFS、BFS,并完成文本词频与索引工具。
- 现代 C++ 的对象与资源:引用、值类别、类、构造析构、复制移动、RAII、运算符、继承和多态。
- 泛型与标准库编程:模板、STL 容器、迭代器、算法、lambda、异常和显式结果类型,并完成现代 C++ 任务管理器。
- 工程工具:调试器、Makefile、CMake、XMake、第三方库和可维护的项目结构。
前半部分主要使用 C17。进入 C++ 后,示例以 C++17 为基线,并优先展示 std::string、std::vector、标准算法、智能指针和 RAII 等现代写法。学习裸指针和手动内存管理仍然重要,因为你需要理解底层机制、C 接口和旧代码;但理解机制不等于在新 C++ 项目里继续手写所有资源管理。
四个阶段项目会反复使用前面建立的概念:
- 成绩统计程序:控制流、函数、数组、字符串和输入验证;
- 通讯录:结构体、动态内存、文件格式和错误传播;
- 文本索引:哈希表、排序、命令行和复杂度;
- 任务管理器:类、STL、lambda、RAII 和现代错误处理。
接下来,我们将从最小的程序开始,逐步建立模型,理解每一行代码的意义和作用。希望你能在学习过程中,既掌握语法,又理解背后的原理,从而成为一名真正的程序设计者。