上篇C语言入门 2
第1章 程序的基本概念 2
1.1程序和编程语言 2
1.2自然语言和形式语言 6
1.3程序的调试 8
1.4第一个程序 9
第2章 常量、变量和表达式 13
2.1继续Hello World 13
2.2常量 16
2.3变量 17
2.4赋值 19
2.5表达式 20
2.6字符类型与字符编码 24
第3章 简单函数 26
3.1数学函数 26
3.2自定义函数 28
3.3形参和实参 34
3.4全局变量、局部变量和作用域 38
第4章 分支语句 44
4.1 if语句 44
4.2 if/else语句 46
4.3布尔代数 48
4.4 switch语句 52
第5章 深入理解函数 54
5.1 return语句 54
5.2增量式开发 57
5.3递归 61
第6章 循环语句 67
6.1 while语句 67
6.2 do/while语句 69
6.3 for语句 70
6.4 break和continue语句 72
6.5嵌套循环 73
6.6 goto语句和标号 74
第7章 结构体 78
7.1复合类型与结构体 78
7.2数据抽象 82
7.3数据类型标志 86
7.4嵌套结构体 87
第8章 数组 89
8.1数组的基本概念 89
8.2数组应用实例:统计随机数 92
8.3数组应用实例:直方图 95
8.4字符串 98
8.5多维数组 100
第9章 编码风格 104
9.1缩进和空白 104
9.2注释 108
9.3标识符命名 112
9.4函数 112
9.5 indent工具 113
第10章gdb 115
10.1单步执行和跟踪函数调用 115
10.2断点 122
10.3观察点 126
10.4段错误 130
第11章 排序与查找 133
11.1算法的概念 133
11.2插入排序 134
11.3算法的时间复杂度分析 136
11.4归并排序 138
11.5线性查找 143
11.6折半查找 144
第12章 栈与队列 149
12.1数据结构的概念 149
12.2堆栈 149
12.3深度优先搜索 151
12.4队列与广度优先搜索 157
12.5环形队列 162
本阶段总结 163
下篇 C语言本质 166
第13章 计算机中数的表示 166
13.1为什么计算机用二进制计数 166
13.2不同进制之间的换算 168
13.3整数的加减运算 170
13.3.1 Sign and Magnitude表示法 170
13.3.2 1’s Complement表示法 170
13.3.3 2’s Complement表示法 172
13.3.4有符号数和无符号数 173
13.4浮点数 173
第14章 数据类型详解 176
14.1整型 176
14.2浮点型 180
14.3类型转换 181
14.3.1 Integer Promotion 181
14.3.2 Usual Arithmetic Conversion 182
14.3.3由赋值产生的类型转换 183
14.3.4强制类型转换 183
14.3.5编译器如何处理类型转换 184
第15章 运算符详解 186
15.1位运算 186
15.1.1按位与、或、异或、取反运算 186
15.1.2移位运算 187
15.1.3掩码 188
15.1.4异或运算的一些特性 189
15.2其他运算符 190
15.2.1复合赋值运算符 190
15.2.2条件运算符 190
15.2.3逗号运算符 191
15.2.4 sizeof运算符与typedef类型声明 191
15.3 Side Effect与Sequence Point 193
15.4运算符总结 196
第16章 计算机体系结构基础 198
16.1内存与地址 198
16.2 CPU 198
16.3设备 201
16.4 MMU 203
16.5 Memory Hierarchy 205
第17章x86汇编程序基础 209
17.1最简单的汇编程序 209
17.2 x86的寄存器 212
17.3第二个汇编程序 212
17.4寻址方式 215
17.5 ELF文件 216
17.5.1目标文件 217
17.5.2可执行文件 223
第18章 汇编与C之间的关系 229
18.1函数调用 229
18.2 main函数、启动例程和退出状态 236
18.3变量的存储布局 242
18.4结构体和联合体 249
18.5 C内联汇编 254
18.6 volatile限定符 255
第19章 链接详解 260
19.1多目标文件的链接 260
19.2定义和声明 266
19.2.1 extern和static关键字 266
19.2.2头文件 269
19.2.3定义和声明的详细规则 274
19.3静态库 276
19.4共享库 279
19.4.1编译、链接、运行 279
19.4.2函数的动态链接过程 286
19.4.3共享库的命名惯例 288
19.5虚拟内存管理 290
第20章 预处理 296
20.1预处理的步骤 296
20.2宏定义 297
20.2.1函数式宏定义 297
20.2.2内联函数 300
20.2.3#、##运算符和可变参数 301
20.2.4 #undef预处理指示 304
20.2.5宏展开的步骤 304
20.3条件预处理指示 305
20.4其他预处理特性 309
第21章Makefile基础 312
21.1基本规则 312
21.2隐含规则和模式规则 319
21.3变量 322
21.4自动处理头文件的依赖关系 327
21.5常用的make命令行选项 331
第22章 指针 334
22.1指针的基本概念 334
22.2指针类型的参数和返回值 337
22.3指针与数组 339
22.4指针与const限定符 342
22.5指针与结构体 344
22.6指向指针的指针与指针数组 344
22.7指向数组的指针与多维数组 348
22.8函数类型和函数指针类型 349
22.9不完全类型和复杂声明 353
第23章 函数接口 357
23.1本章的预备知识 357
23.1.1 strcpy与strncpy 357
23.1.2 malloc与free 362
23.2传入参数与传出参数 367
23.3两层指针的参数 368
23.4返回值是指针的情况 370
23.5回调函数 373
23.6可变参数 376
第24章C标准库 380
24.1字符串操作函数 381
24.1.1给字符串赋初值 381
24.1.2取字符串的长度 382
24.1.3拷贝字符串 383
24.1.4连接字符串 385
24.1.5比较字符串 386
24.1.6搜索字符串 387
24.1.7分割字符串 387
24.2标准I/O库函数 391
24.2.1文件的基本概念 391
24.2.2 fopen/fclose 392
24.2.3 stdin/stdout/stderr 395
24.2.4 errno与perror/strerror函数 396
24.2.5以字节为单位的I/O函数 398
24.2.6操作读写位置的函数 401
24.2.7以字符串为单位的I/O函数 403
24.2.8以记录为单位的I/O函数 404
24.2.9格式化I/O函数 406
24.2.10 C标准库的I/O缓冲区 413
24.2.11本节综合练习 417
24.3数值字符串转换函数 418
24.4分配内存的函数 420
第25章 链表、二叉树和哈希表 422
25.1链表 422
25.1.1单链表 422
25.1.2双向链表 428
25.1.3静态链表 433
25.1.4本节综合练习 433
25.2二叉树 434
25.2.1二叉树的基本概念 434
25.2.2排序二叉树 439
25.3哈希表 443
本阶段总结 445
附录A字符编码 449
参考文献 456
索引 458