第一部分 学习C 1
第一章 C程序解析 3
1.1 一个典型的C程序 3
1.2 注释 3
1.3 语句 4
1.4 关键字和名字 4
1.5 预处理指令 4
1.6 函数 4
1.7 调用函数 5
1.8 声明及初始化变量 5
1.9 外部变量与局部变量 6
1.10 函数原型 6
1.11 关于printf 6
2.2 main函数 8
第二章 函数 8
2.1 函数和结构化程序设计 8
2.3 函数的位置与可见性 9
2.4 函数定义和原型 10
2.5 调用一个函数 10
2.6 传递变元 11
2.7 变元与参数 13
2.8 给参数赋值 13
2.9 值传递 14
2.10 从函数中返回值 15
2.11 使用返回值 17
2.12 声明函数的返回类型 17
2.13 函数原型 18
2.13.1 原型化无参数的函数 18
2.14 旧式的函数声明与定义 19
2.13.2 原型化有不定参数的函数 19
第三章 流程控制 21
3.1 循环:while,do和for 21
3.1.1 while语句 21
3.1.2 do语句 22
3.1.3 for循环 24
3.2 判断语句:if,else,switch,break,continue和goto 26
3.2.1 if语句 26
3.2.2 else子句 27
3.2.3 switch语句 28
3.2.4 break语句 31
3.2.5 continue语句 32
3.2.6 goto语句 33
4.1.1 说明基本类型 35
4.1 基本数据类型 35
第四章 数据类型 35
4.1.2 说明变量 37
4.1.3 说明常量 37
4.2 聚集数据类型 39
4.2.1 数组 39
4.2.2 结构 44
4.2.3 联合 51
第五章 高级数据类型 53
5.1 可见性 53
5.1.1 局部变量 53
5.1.2 外部变量 55
5.1.3 多个源文件中的可见性 56
5.1.4 函数的可见性 57
5.2 生命期 57
5.3.1 数据类型的级别 59
5.3 转换数据类型 59
5.3.2 升级与降级 60
5.3.3 自动类型转换 60
5.3.4 强制类型转换 62
5.4 寄存器变量 63
5.5 用typedef对现存类型重命名 63
5.6 枚举类型 64
第六章 操作符 66
6.1 C操作符介绍 66
6.1.1 算术操作符 66
6.1.2 关系操作符 66
6.1.3 赋值操作符 67
6.2 C语言独特的操作符 68
6.2.1 加1和减1符 68
6.2.2 位操作符 69
6.2.3 逻辑操作符 70
6.2.4 地址操作符 71
6.2.5 条件操作符 72
6.2.6 sizeof操作符 72
6.2.7 逗号操作符 72
6.2.8 基数操作符 73
6.3 操作符优先级 73
第七章 预处理指令 75
7.1 #include指令 75
7.2 define和#undef指令 76
7.2.1 简单文本替换 77
7.2.2 与函数相似的宏 77
7.2.3 #undef指令 78
7.3 条件指令 78
7.4 编译指令 80
第八章 指针 81
8.1 使用指针 81
8.2 指向简单变量的指针 81
8.2.1 声明指针变量 82
8.2.2 指针存储方式 83
8.2.3 初始化指针变量 83
8.2.4 使用指针变量 84
8.2.5 指针基础知识小结 84
8.3 数组指针 85
8.3.1 数组及指针运算 86
8.3.2 指针比较 87
8.3.3 重温PARRAY.C 87
8.4 指针和串 88
8.5 传递指针至函数 90
8.6 指针数组 92
8.7 本章回顾 96
第九章 高级指针 97
9.1 指向指针的指针 97
9.2 数组与指针的等价性 98
9.3 获取命令行参数 101
9.4 空指针 102
9.5 指向结构的指针 102
9.6 指向函数的指针 105
9.7 有关指针的几点说明 107
第十章 程序设计中的错误 108
10.1 操作问题 108
10.1.1 赋值操作符和相等操作符的混淆 108
10.1.3 混淆结构元素操作符 109
10.1.2 混淆操作符优先级 109
10.2 数组问题 110
10.2.1 数组下标错 110
10.2.2 在处理数组时忽略了数组下标 110
10.2.3 超出数组边界 111
10.3 字符串问题 111
10.3.1 混淆字符常数与字符串 111
10.3.2 忘记了字符串结尾的空字符 112
10.3.3 忘记为字符串分配内存 112
10.4 指针问题 113
10.4.1 用错误的地址操作符来初始化指针 113
10.4.2 用错误的类型声明了一个指针 114
10.4.3 使用悬挂指针 114
10.5.1 没有检查库函数的返回值 115
10.5 库函数问题 115
10.5.2 与库函数重名 116
10.5.3 忘记包含声明库函数的包含文件 116
10.5.4 调用scanf时忽略了地址操作符 117
10.6 宏问题 117
10.6.1 忽略了宏参数的括号 118
10.6.2 在宏参数中使用递增和递减操作符 118
10.7 混合性问题 120
10.7.1 不匹配的if和else语句 120
10.7.2 放错了分号的位置 121
10.7.3 在DOS路径中忽略了双反斜杠 122
10.7.4 忽略了开关的语句中的break语句 122
10.7.5 混淆有符号和无符号值 123
11.2.1 操作和打印字符串 127
11.2 屏幕和键盘输入/输出 127
第十一章 输入和输出 127
第二部分 使用C 127
11.1 输入输出流 127
11.2.2 打印数值 131
11.2.3 使用scanf进行键盘输入 134
11.3 标准磁盘输入/输出 136
11.3.1 创建文件和向文本文件写 136
11.3.2 打开文件以便二进制方式读 139
11.3.3 二进制和文本文件 140
11.3.4 数值型变量的文本格式 141
11.3.5 使用二进制格式 145
11.4 低级输入和输出 148
12.1 为什么要分配 152
12.2 存储分配基础 152
第十二章 动态存储分配 152
12.2.1 分配存储块的准备工作 154
12.2.2 指定分配块的大小 155
12.2.3 图示说明 155
12.2.4 对malloc返回地址赋值 156
12.2.5 检测malloc函数返回值 156
12.2.6 访问—已分配存块 157
12.2.7 为不同的数据类型分配存储块 158
12.2.8 采用free函数释放存储块 159
12.3 特定的存储分配函数 159
12.3.1 calloc函数 159
12.3.2 realloc函数 160
12.4 避免麻烦 160
13.1 图形方式 162
13.1.1 检测当前视频模式 162
第十三章 图形 162
13.1.2 设置视频方式 163
13.1.3 编制图形程序 164
13.1.4 使用彩色图形方式 169
13.1.5 使用彩色视频文本方式 177
13.2 文本坐标 178
13.3 图形坐标 179
13.3.1 物理屏幕 179
13.3.2 视口坐标 181
13.3.3 窗口中的实际坐标 181
第十四章 报告用图形 188
14.1 术语 188
14.2 报告用图形程序结构 190
14.3 五个图形程序例子 191
14.4 色板 200
14.4.1 颜色库 201
14.4.2 格式库 201
14.4.3 模式库 202
14.4.4 字符库 203
14.5 通用报告用图形 204
14.5.1 图形环境 204
14.5.2 titletype 204
14.5.3 axistype 205
14.5.4 窗口类型 207
14.5.5 legendtype 208
14.5.6 chartenv 209
14.6 报告用图形函数概述 210
第十五章 字体 212
15.1 Microsoft C字体 212
15.2.1 注册字体 213
15.2 使用Microsoft C字体库 213
15.2.2 设置当前字体 214
15.2.3 显示文本 215
15.3 例题程序 215
15.4 一些提示 218
第十六章 内部汇编 219
16.1 内部汇编的优点 219
16.2 _asm关键字 219
16.3 在_asm块中使用汇编语言 220
16.3.1 指令集 220
16.3.2 表达式 220
16.3.3 Data伪指令及操作符 220
16.3.4 EVEN和ALIGN伪指令 220
16.3.8 注释 221
16.3.9 用CodeView调试器来调试 221
16.3.6 段访问 221
16.3.7 类型和变量大小 221
16.3.5 宏 221
16.4 在_asm块中使用C 222
16.4.1 使用操作符 222
16.4.2 使用C符号 222
16.4.3 访问C数据 223
16.4.4 编写函数 223
16.5 使用和保存寄存器 225
16.6 跳转到标号 225
16.7 调用C函数 226
16.8 定义asm块为C宏 227
16.9 优化 228
第三部分 附录 231