- 历史
- 前言
- 1. 程序的基本概念
- 1.1. 程序和编程语言
- 1.2. 自然语言和形式语言
- 1.3. 程序的调试
- 1.4. 第一个程序
- 2. 常量、变量和表达式
- 2.1. 继续 Hello World
- 2.2. 常量
- 2.3. 变量
- 2.4. 赋值
- 2.5. 表达式
- 2.6. 字符类型与字符编码
- 3. 简单函数
- 3.1. 数学函数
- 3.2. 自定义函数
- 3.3. 形参和实参
- 3.4. 全局变量、局部变量和作用域
- 4. 分支语句
- 4.1. if 语句
- 4.2. if/else 语句
- 4.3. 布尔代数
- 4.4. switch 语句
- 5. 深入理解函数
- 5.1. return 语句
- 5.2. 增量式开发
- 5.3. 递归
- 6. 循环语句
- 6.1. while 语句
- 6.2. do/while 语句
- 6.3. for 语句
- 6.4. break 和 continue 语句
- 6.5. 嵌套循环
- 6.6. goto 语句和标号
- 7. 结构体
- 7.1. 复合类型与结构体
- 7.2. 数据抽象
- 7.3. 数据类型标志
- 7.4. 嵌套结构体
- 8. 数组
- 8.1. 数组的基本概念
- 8.2. 数组应用实例:统计随机数
- 8.3. 数组应用实例:直方图
- 8.4. 字符串
- 8.5. 多维数组
- 9. 编码风格
- 9.1. 缩进和空白
- 9.2. 注释
- 9.3. 标识符命名
- 9.4. 函数
- 9.5. indent 工具
- 10. gdb
- 10.1. 单步执行和跟踪函数调用
- 10.2. 断点
- 10.3. 观察点
- 10.4. 段错误
- 11. 排序与查找
- 11.1. 算法的概念
- 11.2. 插入排序
- 11.3. 算法的时间复杂度分析
- 11.4. 归并排序
- 11.5. 线性查找
- 11.6. 折半查找
- 12. 栈与队列
- 12.1. 数据结构的概念
- 12.2. 堆栈
- 12.3. 深度优先搜索
- 12.4. 队列与广度优先搜索
- 12.5. 环形队列
- 13. 本阶段总结
- 14. 计算机中数的表示
- 14.1. 为什么计算机用二进制计数
- 14.2. 不同进制之间的换算
- 14.3. 整数的加减运算
- 14.4. 浮点数
- 15. 数据类型详解
- 15.1. 整型
- 15.2. 浮点型
- 15.3. 类型转换
- 16. 运算符详解
- 16.1. 位运算
- 16.2. 其它运算符
- 16.3. Side Effect 与 Sequence Point
- 16.4. 运算符总结
- 17. 计算机体系结构基础
- 17.1. 内存与地址
- 17.2. CPU
- 17.3. 设备
- 17.4. MMU
- 17.5. Memory Hierarchy
- 18. x86 汇编程序基础
- 18.1. 最简单的汇编程序
- 18.2. x86 的寄存器
- 18.3. 第二个汇编程序
- 18.4. 寻址方式
- 18.5. ELF 文件
- 19. 汇编与 C 之间的关系
- 19.1. 函数调用
- 19.2. main 函数和启动例程
- 19.3. 变量的存储布局
- 19.4. 结构体和联合体
- 19.5. C 内联汇编
- 19.6. volatile 限定符
- 20. 链接详解
- 20.1. 多目标文件的链接
- 20.2. 定义和声明
- 20.3. 静态库
- 20.4. 共享库
- 20.5. 虚拟内存管理
- 21. 预处理
- 21.1. 预处理的步骤
- 21.2. 宏定义
- 21.3. 条件预处理指示
- 21.4. 其它预处理特性
- 22. Makefile 基础
- 22.1. 基本规则
- 22.2. 隐含规则和模式规则
- 22.3. 变量
- 22.4. 自动处理头文件的依赖关系
- 22.5. 常用的 make 命令行选项
- 23. 指针
- 23.1. 指针的基本概念
- 23.2. 指针类型的参数和返回值
- 23.3. 指针与数组
- 23.4. 指针与 const 限定符
- 23.5. 指针与结构体
- 23.6. 指向指针的指针与指针数组
- 23.7. 指向数组的指针与多维数组
- 23.8. 函数类型和函数指针类型
- 23.9. 不完全类型和复杂声明
- 24. 函数接口
- 24.1. 本章的预备知识
- 24.2. 传入参数与传出参数
- 24.3. 两层指针的参数
- 24.4. 返回值是指针的情况
- 24.5. 回调函数
- 24.6. 可变参数
- 25. C 标准库
- 25.1. 字符串操作函数
- 25.2. 标准 I/O 库函数
- 25.3. 数值字符串转换函数
- 25.4. 分配内存的函数
- 26. 链表、二叉树和哈希表
- 26.1. 链表
- 26.2. 二叉树
- 26.3. 哈希表
- 27. 本阶段总结
- 28. 文件与 I/O
- 28.1. 汇编程序的 Hello world
- 28.2. C 标准 I/O 库函数与 Unbuffered I/O 函数
- 28.3. open/close
- 28.4. read/write
- 28.5. lseek
- 28.6. fcntl
- 28.7. ioctl
- 28.8. mmap
- 29. 文件系统
- 29.1. 引言
- 29.2. ext2 文件系统
- 29.3. VFS
- 30. 进程
- 30.1. 引言
- 30.2. 环境变量
- 30.3. 进程控制
- 30.4. 进程间通信
- 30.5. 练习:实现简单的 Shell
- 31. Shell 脚本
- 31.1. Shell 的历史
- 31.2. Shell 如何执行命令
- 31.3. Shell 的基本语法
- 31.4. bash 启动脚本
- 31.5. Shell 脚本语法
- 31.6. Shell 脚本的调试方法
- 32. 正则表达式
- 32.1. 引言
- 32.2. 基本语法
- 32.3. sed
- 32.4. awk
- 32.5. 练习:在 C 语言中使用正则表达式
- 33. 信号
- 33.1. 信号的基本概念
- 33.2. 产生信号
- 33.3. 阻塞信号
- 33.4. 捕捉信号
- 34. 终端、作业控制与守护进程
- 34.1. 终端
- 34.2. 作业控制
- 34.3. 守护进程
- 35. 线程
- 35.1. 线程的概念
- 35.2. 线程控制
- 35.3. 线程间同步
- 35.4. 编程练习
- 36. TCP/IP 协议基础
- 36.1. TCP/IP 协议栈与数据包封装
- 36.2. 以太网(RFC 894)帧格式
- 36.3. ARP 数据报格式
- 36.4. IP 数据报格式
- 36.5. IP 地址与路由
- 36.6. UDP 段格式
- 36.7. TCP 协议
- 37. socket 编程
- 37.1. 预备知识
- 37.2. 基于 TCP 协议的网络程序
- 37.3. 基于 UDP 协议的网络程序
- 37.4. UNIX Domain Socket IPC
- 37.5. 练习:实现简单的 Web 服务器
- 38. 附录 A. 字符编码
- 38.1. ASCII 码
- 38.2. Unicode 和 UTF-8
- 38.3. 在 Linux C 编程中使用 Unicode 和 UTF-8
- 附录 B. GNU Free Documentation License
- 参考书目
- 索引