上传者: 31625779
|
上传时间: 2021-11-18 14:45:57
|
文件大小: 12.82MB
|
文件类型: -
第0章 本书的目标与结构——引言 1
0.1 本书的目标 1
0.2 目标读者和内容结构 3
第1章 从基础开始——预备知识和复习 7
1.1 C是什么样的语言 7
1.1.1 比喻 7
1.1.2 C的发展历程 8
1.1.3 不完备和不统一的语法 9
1.1.4 ANSI C 10
1.1.5 C的宝典——K&R 11
1.1.6 C的理念 12
1.1.7 C的主体 14
1.1.8 C是只能使用标量的语言 15
1.2 关于指针 16
1.2.1 恶名昭著的指针究竟是什么 16
1.2.2 和指针的第一次亲密接触 17
1.2.3 指针和地址之间的微妙关系 23
1.2.4 指针运算 26
1.2.5 什么是空指针 27
1.2.6 实践——swap函数 31
1.3 关于数组 34
1.3.1 运用数组 34
1.3.2 数组和指针的微妙关系 37
1.3.3 下标运算符[]和数组是没有关系的 39
1.3.4 为什么存在奇怪的指针运算 42
1.3.5 不要滥用指针运算 43
1.3.6 试图将数组作为函数的参数进行传递 45
1.3.7 声明函数形参的方法 48
第2章 做个实验见分晓——C是怎么使用内存的 51
2.1 虚拟地址 51
2.2 C的内存的使用方法 56
2.2.1 C的变量的种类 56
2.2.2 输出地址 58
2.3 函数和字符串常量 61
2.3.1 只读内存区域 61
2.3.2 指向函数的指针 62
2.4 静态变量 64
2.4.1 什么是静态变量 64
2.4.2 分割编译和连接 64
2.5 自动变量(栈) 66
2.5.1 内存区域的“重复使用” 66
2.5.2 函数调用究竟发生了什么 66
2.5.3 可变长参数 73
2.5.4 递归调用 80
2.6 利用malloc()来进行动态内存分配(堆) 84
2.6.1 malloc()的基础 84
2.6.2 malloc()是“系统调用”吗 88
2.6.3 malloc()中发生了什么 89
2.6.4 free()之后,对应的内存区域会怎样 91
2.6.5 碎片化 93
2.6.6 malloc()以外的动态内存分配函数 94
2.7 内存布局对齐 98
2.8 字节排序 101
2.9 关于开发语言的标准和实现——对不起,前面的内容都是忽悠的 102
第3章 揭秘C的语法——它到底是怎么回事 105
3.1 解读C的声明 105
3.1.1 用英语来阅读 105
3.1.2 解读C的声明 106
3.1.3 类型名 109
3.2 C的数据类型的模型 111
3.2.1 基本类型和派生类型 111
3.2.2 指针类型派生 112
3.2.3 数组类型派生 113
3.2.4 什么是指向数组的指针 114
3.2.5 C语言中不存在多维数组! 116
3.2.6 函数类型派生 117
3.2.7 计算类型的大小 119
3.2.8 基本类型 121
3.2.9 结构体和共用体 122
3.2.10 不完全类型 123
3.3 表达式 125
3.3.1 表达式和数据类型 125
3.3.2 “左值”是什么——变量的两张面孔 129
3.3.3 将数组解读成指针 130
3.3.4 数组和指针相关的运算符 132
3.3.5 多维数组 133
3.4 解读C的声明(续) 137
3.4.1 const修饰符 137
3.4.2 如何使用const?可以使用到什么程度? 139
3.4.3 typedef 141
3.5 其他 143
3.5.1 函数的形参的声明 143
3.5.2 关于空的下标运算符[] 146
3.5.3 字符串常量 148
3.5.4 关于指向函数的指针引起的混乱 151
3.5.5 强制类型转换 152
3.5.6 练习——挑战那些复杂的声明 153
3.6 应该记住:数组和指针是不同的事物 157
3.6.1 为什么会引起混乱 157
3.6.2 表达式之中 158
3.6.3 声明 160
第4章 数组和指针的常用方法 161
4.1 基本的使用方法 161
4.1.1 以函数返回值之外的方式来返回值 161
4.1.2 将数组作为函数的参数传递 162
4.1.3 可变长数组 163
4.2 组合使用 16