第一篇 准备篇 2
第1章 C语言概述 2
1.1 C语言的起源与发展 2
1.2 C语言特性 3
1.3 开发环境搭建 4
1.3.1 Windows开发环境 4
1.3.2 UNIX/Linux开发环境 13
1.3.3 随书网盘的开发环境 33
1.4 hello,world 38
1.5 小结 43
第2章 C语言快速入门 44
2.1 C语言的语法特点 44
2.2 猜数字游戏 45
2.2.1 编写输入数字的C代码 46
2.2.2 限制输入数字的范围 46
2.2.3 引入循环机制,允许重新输入 48
2.2.4 产生1~500以内的随机整数 50
2.2.5 反复接收玩家输入,直到猜中数字为止 52
2.2.6 自动猜数算法 54
2.3 小结 57
第3章 AT&T汇编概述 58
3.1 AT&T汇编基础 58
3.1.1 IA-32指令 58
3.1.2 汇编的作用 59
3.1.3 AT&T汇编语言的特点 59
3.1.4 第一个AT&T汇编 61
3.2 程序运行机制 64
3.3 小结 65
第二篇 基础篇 68
第4章 指针基础 68
4.1 C指针概述 68
4.2 C指针基础 69
4.2.1 指向标量的C指针 69
4.2.2 指向数组的C指针 73
4.2.3 指针数组 75
4.2.4 函数参数中使用指针 82
4.2.5 常量指针 85
4.2.6 函数指针 88
4.2.7 文件指针 91
4.3 小结 98
第5章 C开发基础 99
5.1 编译与调试C程序 99
5.1.1 GCC与GDB 99
5.1.2 make工具与makefile 104
5.2 GLib函数库 107
5.2.1 GLib简述 107
5.2.2 GLib基础 110
5.2.3 GLib数据类型及标准宏 118
5.3 内存管理 120
5.3.1 glibc的内存管理 120
5.3.2 内存分配机制 121
5.3.3 内存回收 125
5.4 Ncurses库 137
5.4.1 Ncurses简述 137
5.4.2 Ncurses基础 137
5.4.3 Ncurses实例:文字编辑器 154
5.5 小结 181
第三篇 进阶篇 184
第6章 C开发技巧集锦 184
6.1 递归 184
6.1.1 递归概述 184
6.1.2 斐波那契数列 184
6.1.3 brainfuck解释器 186
6.2 字符串操作 196
6.2.1 复制并截断字符串 196
6.2.2 字符串拼接 197
6.2.3 在内存中复制字符串 197
6.2.4 目录的尾部位置 197
6.2.5 查找文件扩展名 198
6.3 加法溢出 198
6.3.1 溢出原理 198
6.3.2 溢出应用 199
6.4 编译信息的预定义宏 200
6.4.1 FILE与LINE 201
6.4.2 #line与#error 201
6.5 C与汇编语言混合编程 202
6.5.1 寄存器 203
6.5.2 变量存储分配 204
6.5.3 汇编指令概述 205
6.5.4 C编译执行原理 207
6.5.5 汇编调用C库函数 209
6.5.6 C内联汇编 210
6.6 小结 216
第7章 C并行与网络基础 217
7.1 多进程、多线程基础 217
7.1.1 多进程编程 218
7.1.2 多线程委托模型 220
7.1.3 分离线程 222
7.1.4 取消线程 224
7.1.5 多线程竞争域 230
7.1.6 线程互斥对象 232
7.1.7 线程专有数据 239
7.1.8 消息队列 241
7.2 C网络基础 245
7.2.1 TCP基础 245
7.2.2 TCP编程基础 245
7.2.3 TCP编程示例 248
7.3 小结 254