第1章 基本概念 1
1.1 入门 1
1.2 变量与算术表达式 3
1.3 for语句 8
1.4 符号常量 9
1.5 字符输入输出 9
1.5.1 文件复制 10
1.5.2 字符计数 11
1.5.3 行计数 13
1.5.4 单词计数 13
1.6 数组 15
1.7 函数 17
1.8 变元——按值调用 20
1.9 字符数组 20
1.10 外部变量与作用域 23
第2章 类型、运算符与表达式 27
2.1 变量名 27
2.2 数据类型与大小 27
2.3 常量 28
2.4 说明 30
2.5 算术运算符 31
2.6 关系运算符与逻辑运算符 32
2.7 类型转换 33
2.8 加一与减一运算符 36
2.9 按位运算符 38
2.10 赋值运算符与赋值表达式 39
2.11 条件表达式 41
2.12 运算符优先级与表达式求值次序 42
第3章 控制流 44
3.1 语句与分程序 44
3.2 if-else语句 44
3.3 else-if语句 45
3.4 switch语句 47
3.5 while与for循环语句 48
3.6 do-while循环语句 51
3.7 break语句与continue语句 52
3.8 goto语句与标号 53
第4章 函数与程序结构 55
4.1 函数的基本知识 55
4.2 返回非整数值的函数 58
4.3 外部变量 60
4.4 作用域规则 66
4.5 头文件 67
4.6 静态变量 69
4.7 寄存器变量 70
4.8 分程序结构 70
4.9 初始化 71
4.10 递归 72
4.11 C预处理程序 74
4.11.1 文件包含 74
4.11.2 宏替换 74
4.11.3 条件包含 76
第5章 指针与数组 78
5.1 指针与地址 78
5.2 指针与函数变元 80
5.3 指针与数组 81
5.4 地址算术运算 84
5.5 字符指针与函数 87
5.6 指针数组与指向指针的指针 90
5.7 多维数组 93
5.8 指针数组的初始化 95
5.9 指针与多维数组 96
5.10 命令行变元 96
5.11 指向函数的指针 100
5.12 复杂说明 103
第6章 结构 108
6.1 结构的基本知识 108
6.2 结构与函数 109
6.3 结构数组 112
6.4 结构指针 115
6.5 自引用结构 117
6.6 查找表 121
6.7 类型定义 123
6.8 联合 125
6.9 位字段 126
第7章 输入与输出 128
7.1 标准输入输出 128
7.2 格式化输出——printf函数 130
7.3 变长变元表 131
7.4 格式化输入——scanf函数 133
7.5 文件访问 135
7.6 错误处理——stderr和exit函数 138
7.7 行输入输出 139
7.8 其他函数 140
7.8.1 字符串处理函数 140
7.8.2 字符类测试和转换函数 141
7.8.3 ungetc函数 141
7.8.4 命令执行函数 141
7.8.5 存储管理函数 141
7.8.6 数学函数 142
7.8.7 随机数发生器函数 142
第8章 UNIX系统界面 144
8.1 文件描述符 144
8.2 低级I/O——read和write系统调用 145
8.3 open、creat、close和unlink系统调用 146
8.4 随机访问——lseek系统调用 148
8.5 实例——fopen和getc函数的一种实现方法 149
8.6 实例——目录显示 153
8.7 实例——存储分配程序 158
附录A 参考手册 163
A.1 引言 163
A.2 词法规则 163
A.3 语法符号 166
A.4 标识符的含义 166
A.5 对象和左值 168
A.6 转换 168
A.7 表达式 171
A.8 说明 180
A.9 语句 192
A.10 外部说明 195
A.11 作用域与连接 198
A.12 预处理 199
A.13 语法 204
附录B 标准库 212
B.1 输入与输出:<stdio.h> 212
B.2 字符类测试:<ctype.h> 219
B.3 字符串函数:<string.h> 220
B.4 数学函数:<math.h> 221
B.5 实用函数:<stdlib.h> 222
B.6 诊断:<assert.h> 225
B.7 变长变元表:<stdarg.h> 225
B.8 非局部跳转:<setjmp.h> 225
B.9 信号处理:<signal.h> 226
B.10 日期与时间函数:<time.h> 226
B.11 由实现定义的限制:<limits.h>和<float.h> 228
附录C 变更小结 230
附录D 索引 233