C语言从新手到高手
作者:关淞元著
出版时间: 2020年版
内容简介
配套赠送书中案例源代码一本带你轻松入门、直接上岗的实操手册实战派架构师 倾力之作希望分享给更多有志于通过技术改变生活的人
目录
篇新手篇
第 1 章 C 语言概述
1.1 C 语言的前世今生............................................................................................... 2
1.2 C 语言的优势与劣势........................................................................................... 3
1.3 C 语言的当前标准............................................................................................... 4
1.4 C 语言的编程机制............................................................................................... 4
第2 章 C 语言的骨骼——基础数据类型
2.1 常量与变量........................................................................................................... 6
2.1.1 常量.......................................................................................................... 6
2.1.2 变量.......................................................................................................... 8
2.2 关键字和保留标识符.......................................................................................... 9
2.3 整数类型............................................................................................................. 11
2.4 浮点类型............................................................................................................. 11
2.5 字符和字符串类型............................................................................................13
2.6 类型之间的转换................................................................................................14
2.7 程序注释.............................................................................................................18
第3 章 C 语言的肉身——运算符
3.1 算术运算符.........................................................................................................20
3.2 赋值运算符.........................................................................................................213.3 逻辑运算符.........................................................................................................21
3.4 移位运算符.........................................................................................................22
3.5 关系运算符.........................................................................................................23
3.6 增量运算符.........................................................................................................24
3.7 位运算符.............................................................................................................25
3.8 条件运算符.........................................................................................................26
3.9 逗号运算符.........................................................................................................27
3.10 运算符的优先级..............................................................................................28
第4 章 C 语言的血液——控制流
4.1 顺序流.................................................................................................................30
4.2 条件分支流.........................................................................................................31
4.3 循环控制流.........................................................................................................35
4.4 输入输出流.........................................................................................................38
4.4.1 scanf/printf 函数.....................................................................................38
4.4.2 getchar/putchar 函数..............................................................................40
4.4.3 gets/puts 函数.........................................................................................41
4.5 语句嵌套.............................................................................................................42
第5 章 C 语言的灵魂——函数
5.1 函数定义.............................................................................................................44
5.2 函数声明.............................................................................................................45
5.3 函数参数.............................................................................................................46
5.4 函数调用.............................................................................................................48
5.5 函数递归.............................................................................................................52
5.6 可变参数列表.....................................................................................................54
第6 章 丫丫学步——构建个程序
6.1 main 函数............................................................................................................56
6.2 程序风格.............................................................................................................58
6.3 个C 程序....................................................................................................60
6.4 编译执行.............................................................................................................61第二篇 进阶篇
第 7 章 成长的烦恼——数组和指针
7.1 一维数组.............................................................................................................64
7.2 多维数组.............................................................................................................65
7.3 变长数组.............................................................................................................66
7.4 指针与地址.........................................................................................................68
7.5 指针数组.............................................................................................................71
7.6 指向函数的指针................................................................................................73
7.7 指向指针的指针................................................................................................74
7.8 指针和数组的区别............................................................................................75
第8 章 成长的积累——结构体、联合体及其他数据形式
8.1 结构体基础知识................................................................................................77
8.2 结构的存储与对齐............................................................................................79
8.3 结构数组.............................................................................................................84
8.4 指向结构的指针................................................................................................85
8.5 结构体自引用.....................................................................................................87
8.6 联合体基础知识................................................................................................88
8.7 枚举类型.............................................................................................................90
8.8 位字段.................................................................................................................93
8.9 typedef 简介........................................................................................................95
第9 章 成长的惊喜——预处理器
9.1 宏定义.................................................................................................................98
9.2 文件包含...........................................................................................................102
9.3 条件编译...........................................................................................................103
第10 章 成人礼——次构建多文件工程
10.1 多源文件编译................................................................................................107
10.2 动态库和静态库............................................................................................ 11310.2.1 静态库................................................................................................ 114
10.2.2 动态库................................................................................................ 115
第三篇实战篇
第 11 章 骨骼的发育——经典数据结构
11.1 栈.....................................................................................................................120
11.2 链表.................................................................................................................123
11.3 队列.................................................................................................................126
11.4 树.....................................................................................................................129
11.5 堆.....................................................................................................................134
11.6 散列表.............................................................................................................137
11.7 图.....................................................................................................................139
11.7.1 邻接矩阵............................................................................................141
11.7.2 邻接表................................................................................................142
11.7.3 十字链表............................................................................................142
11.7.4 邻接多重表........................................................................................143
11.8 一个具体的例子——协议识别引擎............................................................144
第12 章 社会经验的积累——经典设计模式
12.1 程序设计理念................................................................................................151
12.2 设计模式原则................................................................................................152
12.3 单件模式.........................................................................................................154
12.4 工厂模式.........................................................................................................157
12.5 抽象工厂模式................................................................................................158
12.6 创建者模式.....................................................................................................161
12.7 原型模式.........................................................................................................162
12.8 适配器模式.....................................................................................................163
12.9 装饰器模式.....................................................................................................164
12.10 代理模式.......................................................................................................166
12.11 外观模式.......................................................................................................167
12.12 桥接模式.......................................................................................................169
12.13 组合模式.......................................................................................................170
目 录 V
12.14 享元模式.......................................................................................................172
12.15 策略模式.......................................................................................................174
12.16 模板方法模式..............................................................................................175
12.17 观察者模式...................................................................................................177
12.18 迭代器模式...................................................................................................179
12.19 责任链模式...................................................................................................180
12.20 命令模式.......................................................................................................182
12.21 备忘录模式...................................................................................................183
12.22 状态模式.......................................................................................................185
12.23 访问者模式...................................................................................................186
12.24 中介者模式...................................................................................................188
12.25 解释器模式...................................................................................................190
第13 章 成长的挫折——再论程序调试
13.1 断言.................................................................................................................194
13.2 的打印.....................................................................................................197
13.3 GDB 调试浅谈...............................................................................................199
13.3.1 基础命令............................................................................................199
13.3.2 进阶多线程命令................................................................................205
13.3.3 调试core 文件...................................................................................206
13.4 符号表与反汇编............................................................................................210
13.5 core 文件的配置.............................................................................................212
第14 章 适应社会——可移植性
14.1 为什么需要可移植........................................................................................214
14.2 如何设计可移植的数据结构........................................................................215
14.3 如何设计可移植的程序................................................................................217
第四篇高手篇
第 15 章 找出自身的不足——性能调试
15.1 程序Cycle 的意义.........................................................................................220
VI C 语言从新手到高手
15.2 性能测试工具的使用....................................................................................221
15.3 变量的优化.....................................................................................................224
15.4 高性能函数.....................................................................................................228
15.5 嵌入式汇编.....................................................................................................234
15.6 编译优化.........................................................................................................237
第16 章 做事需未雨绸缪——Cache 技术
16.1 为什么要使用Cache .....................................................................................241
16.2 Cache 有多少级.............................................................................................242
16.3 Cache Line 的介绍.........................................................................................244
16.4 与Cache 结合的CPU 指令..........................................................................246
16.5 Cache 的淘汰策略.........................................................................................250
16.6 让程序爱上Cache .........................................................................................252
第17 章 找到亲近的人与事——NUMA 技术
17.1 NUMA 简介...................................................................................................254
17.2 NUMA 存储管理...........................................................................................257
17.3 NUMA 相关工具...........................................................................................258
17.4 NUMA 读写实测...........................................................................................260
17.5 让程序爱上NUMA.......................................................................................261
第18 章 社会更新换代——大页技术
18.1 大页简介.........................................................................................................262
18.2 Linux 如何配置大页......................................................................................263
18.3 简述Hugetlbfs 实现.......................................................................................266
18.4 程序如何使用大页........................................................................................269
第19 章 自我修炼——多线程技术
19.1 进程与线程的区别........................................................................................271
19.2 多线程编程.....................................................................................................275
19.2.1 线程的创建和结束............................................................................275
19.2.2 线程同步............................................................................................277
目 录 VII
19.2.3 线程互斥............................................................................................281
19.2.4 定义线程独有变量............................................................................283
19.3 CPU 亲和性....................................................................................................284
19.3.1 RTC 模式............................................................................................287
19.3.2 Pipeline 模式......................................................................................288
19.4 多线程调试.....................................................................................................289
附录A 术语表
附录 B 操作符优先级表
附录 C Linux 信号表