第1章 一点点想说在前面的话 1
1.1 计算机是怎样运行的? 1
1.2 程序是怎样运行的? 4
1.3 前面两节与C语言有什么关系? 5
1.4 代码风格 8
1.5 永远不要写void main() 11
1.6 不要把试卷型代码风格奉为圭臬 12
1.7 要避免进入C语言标准的“灰色地带” 14
第2章 从关键字说起 16
2.1 C语言的关键字还是32个吗? 16
2.2 声明和定义 17
2.3 C语言程序的段内存分配 18
2.4 堆和栈的理论知识 20
2.5 第一个关键字auto 22
2.6 基本数据类型、强制转换以及signed/unsigned 23
2.7 最不像关键字的关键字sizeof 25
2.8 好恋人ifelse 26
2.9 循环三剑客与它们的朋友:break、continue、goto以及逗号运算符 28
2.10 “八爪章鱼”switch和它的“爪子”case 36
2.11 “只进不出”的const 37
2.12 变量作用域与“外籍标签”extern 38
2.13 不老实的static 41
2.14 集结伙伴的struct 43
2.15 union蜗居 45
2.16 枚举:百里挑一 49
2.17 爱给人起小名的typedef 52
2.18 比较纠结的两个关键字:volatile和register 54
2.19 五个新成员:restrict,inline,_Complex,_Imaginary,_Bool 54
第3章 那个曾被你画叉叉的函数 57
3.1 为啥会有函数咧? 57
3.2 库和接口 59
3.3 自己的函数 62
3.4 替身与明星:函数的形参和实参 63
3.5 函数中的“导演”及“编剧” 65
3.6 为什么会有函数声明?必须要声明吗? 66
3.7 套娃一样的函数嵌套调用:深层次理解函数调用 68
第4章 数组VS指针 75
4.1 从数组说起 75
4.2 指针说:怪我喽? 82
4.3 知道了指针,二重指针也不在话下 86
4.4 左值?右值? 88
4.5 数组与指针的区别 90
4.6 指针和数组何时“相同”? 94
4.7 数组的指针表示 95
4.8 函数与指针:深入理解传址调用 96
4.9 结构体与指针 108
4.10 内存的动态申请、内存泄漏以及野指针 112
4.11 “空指针”与“空类型指针” 123
4.12 restrict指针 124
4.13 数组下角标越界与缓冲区溢出 125
第5章 学会了C语言入门C++还会难吗?——C++快速过渡 134
5.1 什么是面向对象编程? 134
5.2 抽象的艺术 136
5.3 封装与类 137
5.4 访问控制 139
5.5 类的声明 140
5.6 函数重载 142
5.7 构造函数、传引用调用以及运算符重载 148
5.8 对象指针和this指针 167
5.9 析构函数和内联函数 170
5.10 静态成员与常成员 175
5.11 对象数组、对象指针数组和对象数组指针 177
5.12 拷贝构造函数 178
5.13 new、delete关键字 182
5.14 继承 185
5.15 多态性与虚函数 194
5.16 关于C++,你接下来可能需要学习的内容 198
附录 C语言结构型变量的内存对齐问题 202
参考文献 210