第1章 快速上手 1 1.1 简介 1 1.1.1 空白和注释 4 1.1.2 预处理指令 4 1.1.3 main函数 5 1.1.4 read_column_numbers函数 8 1.1.5 rearrange函数 12 1.2 补充说明 14 1.3 编译 14 1.4 总结 15 1.5 警告的总结 15 1.6 编程提示的总结 15 1.7 问题 16 1.8 编程练习 16 第2章 基本概念 19 2.1 环境 19 2.1.1 翻译 19 2.1.2 执行 21 2.2 词法规则 21 2.2.1 字符 22 2.2.2 注释 23 2.2.3 自由形式的源代码 23 2.2.4 标识符 24 2.2.5 程序的形式 24 2.3 程序风格 25 2.4 总结 26 2.5 警告的总结 26 2.6 编程提示的总结 26 2.7 问题 27 2.8 编程练习 28 第3章 数据 29 3.1 基本数据类型 29 3.1.1 整型家族 29 3.1.2 浮点类型 32 3.1.3 指针 33 3.2 基本声明 35 3.2.1 初始化 35 3.2.2 声明简单数组 36 3.2.3 声明指针 36 3.2.4 隐式声明 37 3.3 typedef 38 3.4 常量 38 3.5 作用域 39 3.5.1 代码块作用域 40 3.5.2 文件作用域 41 3.5.3 原型作用域 41 3.5.4 函数作用域 41 3.6 链接属性 41 3.7 存储类型 43 3.8 static关键字 44 3.9 作用域、存储类型示例 45 3.10 总结 46 3.11 警告的总结 47 3.12 编程提示的总结 47 3.13 问题 48 第4章 语句 51 4.1 空语句 51 4.2 表达式语句 51 4.3 代码块 52 4.4 if语句 52 4.5 while语句 53 4.5.1 break和continue语句 54 4.5.2 while语句的执行过程 54 4.6 for语句 55 4.7 do语句 56 4.8 switch语句 57 4.8.1 switch中的 break语句 58 4.8.2 default子句 59 4.8.3 switch语句的执行过程 59 4.9 goto语句 60 4.10 总结 61 4.11 警告的总结 62 4.12 编程提示的总结 62 4.13 问题 62 4.14 编程练习 63 第5章 操作符和表达式 67 5.1 操作符 67 5.1.1 算术操作符 67 5.1.2 移位操作符 67 5.1.3 位操作符 69 5.1.4 赋值 70 5.1.5 单目操作符 72 5.1.6 关系操作符 73 5.1.7 逻辑操作符 74 5.1.8 条件操作符 75 5.1.9 逗号操作符 76 5.1.10 下标引用、函数调用和结构成员 77 5.2 布尔值 78 5.3 左值和右值 79 5.4 表达式求值 80 5.4.1 隐式类型转换 80 5.4.2 算术转换 80 5.4.3 操作符的属性 81 5.4.4 优先级和求值的顺序 82 5.5 总结 85 5.6 警告的总结 86 5.7 编程提示的总结 86 5.8 问题 86 5.9 编程练习 88 第6章 指针 91 6.1 内存和地址 91 6.2 值和类型 92 6.3 指针变量的内容 93 6.4 间接访问操作符 94 6.5 未初始化和非法的指针 95 6.6 NULL指针 96 6.7 指针、间接访问和左值 97 6.8 指针、间接访问和变量 97 6.9 指针常量 98 6.10 指针的指针 98 6.11 指针表达式 99 6.12 实例 104 6.13 指针运算 107 6.13.1 算术运算 108 6.13.2 关系运算 110 6.14 总结 111 6.15 警告的总结 112 6.16 编程提示的总结 112 6.17 问题 112 6.18 编程练习 115 第7章 函数 117 7.1 函数定义 117 7.2 函数声明 119 7.2.1 原型 119 7.2.2 函数的缺省认定 121 7.3 函数的参数 122 7.4 ADT和黑盒 124 7.5 递归 127 7.5.1 追踪递归函数 128 7.5.2 递归与迭代 131 7.6 可变参数列表 134 7.6.1 stdarg宏 135 7.6.2