C语言兼具高级语言和汇编语言的特点,学习起来难度较大,令不少初学者望而生畏。同时,C语言又是一门应用非常广泛的编程语言,在实际应用中如何根据不同的应用场景高效地使用C语言,也是大家非常感兴趣的话题。《C语言点滴》精心选取C语言一些必备知识,这也是初学者容易搞不清楚、犯错误的知识点,进行深入地分析和介绍,以期帮助读者清除C语言学习之路上的“绊脚石”,降低初学入门的难度,培养继续深入的兴趣。全书共14章。第1章覆盖了C语言学习和程序员职业生涯的入门话题,轻松诙谐,堪称“餐前开胃小菜”。第2章介绍了编写程序所需的基础知识。第3章到第13章,分别针对C语言的要点和难点进行深入细致的剖析和探讨,涉及数据类型、表达式和运算符、输入输出、控制结构、函数、库函数、数组、指针、结构体、文件、错误与调试等内容。第14章探讨了程序效率和编程习惯等话题,并且为读者继续学习C语言指明了方向。
《C语言点滴》作者有教授C语言课程的背景,其深入浅出、轻松幽默、娓娓道来的讲课风格,在《C语言点滴》中也得到充分体现。读者在阅读时往往会会心一笑,在不知不觉中收获知识和感悟。通过阅读《C语言点滴》,读者可以掌握C语言编程的核心知识点和必备技能,也可以巩固基础、拓展视野,为程序员的职业生涯铺路搭桥。《C语言点滴》适合作为C语言初学者和程序员的入门读物和自学教程,也可作为高等院校计算机相关专业学生的参考读物。
目录
- 第1章 程序猿 && 程序媛 1
- 1.1 装备篇 1
- 1.1.1 衣着 1
- 1.1.2 键盘和鼠标 2
- 1.1.3 电脑 4
- 1.2 程序猿和互联网 6
- 1.2.1 搜索引擎 6
- 1.2.2 通信 9
- 1.2.3 社交 12
- 1.2.4 论坛与博客 14
- 1.2.5 夺宝奇兵 17
- 1.2.6 互联网精神 19
- 1.3 熬夜指南 20
- 1.4 程序=数据结构+算法 22
- 1.4.1 数据结构 23
- 1.4.2 算法 24
- 1.5 内功修炼 28
- 1.5.1 数学 28
- 1.5.2 软件工程 31
- 第2章 编程基础知识 33
- 2.1 编程语言 33
- 2.1.1 C语言的昨天 34
- 2.1.2 C语言的今天 35
- 2.2 如何学好C语言 38
- 2.3 开发平台 40
- 2.4 开发工具 42
- 2.4.1 集成开发工具 42
- 2.4.2 文档生成工具 45
- 2.4.3 版本控制工具 47
- 2.4.4 推荐开发流程 49
- 2.5 编程风格 50
- 2.5.1 变量名 51
- 2.5.2 缩进和大括号匹配 52
- 2.5.3 函数的长度和分布 53
- 2.5.4 编程字体 54
- 2.5.5 风格和重构 55
- 第3章 数据类型 58
- 3.1 原码、反码和补码的解释 58
- 3.2 整型数的溢出 62
- 3.3 溢出深入分析 64
- 3.3.1 溢出的定义 64
- 3.3.2 溢出的边界 65
- 3.3.3 溢出的危害 66
- 3.3.4 避免溢出的方法 66
- 3.4 无符号数 67
- 3.5 int和char的关系 70
- 3.5.1 char就是short short 70
- 3.5.2 char的符号 71
- 3.6 浮点数的有效位 72
- 3.7 判断两个浮点数相等 75
- 3.8 常量与常量后缀 76
- 3.9 sizeof运算符 77
- 3.9.1 sizeof返回值 77
- 3.9.2 sizeof的用处 77
- 3.9.3 sizeof(指针)和sizeof(数组)的区别 78
- 3.10 本章小结 79
- 第4章 表达式和运算符 81
- 4.1 自增(减)运算符 81
- 4.2 左值和右值 83
- 4.3 布尔值 84
- 4.4 数据类型转换 85
- 4.5 写表达式的注意事项 88
- 4.5.1 用括号来确定运算优先级 88
- 4.5.2 避免运算顺序问题 89
- 4.6 有趣的模运算% 90
- 4.6.1 模运算的基本知识和用法 90
- 4.6.2 模运算和哈希(Hash)结构 91
- 4.7 位运算 94
- 4.8 本章小结 96
- 第5章 输入输出 97
- 5.1 流 97
- 5.2 stdin、stdout、stderr 99
- 5.3 单个字符输入输出 100
- 5.3.1 字符输入输出函数 101
- 5.3.2 getch函数 103
- 5.4 字符串输入输出 104
- 5.5 格式化输入输出 105
- 5.5.1 scanf函数的基本知识 105
- 5.5.2 scanf函数的输入特点 107
- 5.5.3 scanf函数处理字符、数字和字符串 109
- 5.5.4 scanf函数注意事项 111
- 5.5.5 scanf函数总结 114
- 5.5.6 格式化输出printf函数 116
- 5.5.7 选择合适的格式控制符 117
- 5.6 输入规则全真七子 118
- 5.7 字符串的安全输入方法 119
- 5.8 本章小结 121
- 第6章 控制结构 122
- 6.1 控制结构常见错误 122
- 6.2 语句块 124
- 6.3 for循环 125
- 6.4 结构化编程及goto语句 127
- 6.5 假死现象 129
- 6.6 本章小结 130
- 第7章 函数、模块和宏定义 132
- 7.1 预处理指令 132
- 7.1.1 文件包含 132
- 7.1.2 条件编译 133
- 7.1.3 宏替换 134
- 7.2 main函数 135
- 7.3 命令行解析 138
- 7.4 static和const 139
- 7.5 编译和链接 142
- 7.6 声明和定义 144
- 7.7 头文件 145
- 7.8 头文件的重复包含 147
- 7.9 多文件项目 150
- 7.10 C和C++语言混合项目 152
- 7.11 本章小结 154
- 第8章 库函数 155
- 8.1 数学相关 156
- 8.2 字符串相关 156
- 8.3 字符和数字相互转换 159
- 8.4 时间函数 160
- 8.5 随机数探讨 162
- 8.6 系统相关函数 165
- 8.7 库函数使用建议 166
- 8.8 本章小结 167
- 第9章 数组 169
- 9.1 数组的基本知识 169
- 9.2 数组初始化和数组之间赋值 170
- 9.3 数组与函数 171
- 9.4 数组越界 172
- 9.5 debug和release的区别 173
- 9.6 二维数组 174
- 9.6.1 二维数组的定义和初始化 175
- 9.6.2 二维数组的访问 176
- 9.7 本章小结 177
- 第10章 指针 178
- 10.1 指针的基本知识和定义 179
- 10.2 指针类型和指针指向的类型 181
- 10.3 指针定义中常见的错误 183
- 10.3.1 野指针 183
- 10.3.2 指针赋值原则 184
- 10.4 void和NULL 185
- 10.4.1 void 185
- 10.4.2 NULL 187
- 10.5 指针和数组的关系初探 188
- 10.6 指针与数组关系的再探 192
- 10.6.1 四个概念的联系 193
- 10.6.2 指针型指针和指针数组 195
- 10.6.3 数组指针和二维数组 198
- 10.7 C语言的内存映像 200
- 10.8 动态内存分配 202
- 10.8.1 典型用法 202
- 10.8.2 malloc函数和calloc函数 203
- 10.8.3 realloc函数 204
- 10.8.4 内存释放free 206
- 10.8.5 内存操作函数 208
- 10.8.6 内存使用的效率建议 209
- 10.9 动态数组 210
- 10.9.1 动态一维数组 210
- 10.9.2 动态二维数组 211
- 10.10 字符串 212
- 10.11 函数和指针 215
- 10.11.1 用指针类型作为函数形参 215
- 10.11.2 函数返回指针类型 217
- 10.12 函数指针 219
- 10.12.1 函数指针基本知识 219
- 10.12.2 回调函数 220
- 10.12.3 函数指针作用的深度思考 222
- 10.13 复杂声明 227
- 10.13.1 复杂声明分析 227
- 10.13.2 返回函数指针的函数 230
- 10.13.3 复杂声明定义 232
- 10.13.4 复杂声明用于强制类型转换 233
- 10.14 本章小结 234
- 第11章 结构体 236
- 11.1 自定义数据类型 236
- 11.2 定义一个结构体变量的三种方法 237
- 11.3 结构体中的“洞” 239
- 11.4 结构体的赋值和比较 240
- 11.5 结构体的读写 242
- 11.6 函数与结构体 243
- 11.7 枚举 244
- 11.8 本章小结 245
- 第12章 文件 247
- 12.1 文件基础知识 247
- 12.1.1 文件指针的解释 247
- 12.1.2 路径名 248
- 12.1.3 r+和w+的区别 249
- 12.2 同时读写 249
- 12.3 断行标志符 251
- 12.4 文本格式和二进制格式 254
- 12.5 文件末尾与feof函数 256
- 12.5.1 feof函数的基本知识 256
- 12.5.2 正确使用feof函数 260
- 12.6 文件读写的错误处理 261
- 12.7 本章小结 262
- 第13章 Bug,错误及调试 264
- 13.1 Bug、错误(error)及异常(exception) 265
- 13.1.1 三个概念的区别 265
- 13.1.2 Debug和错误处理 266
- 13.2 Bug以及Debug 267
- 13.2.1 Bug的分类 267
- 13.2.2 bug的避免及发现 269
- 13.2.3 常见的Debug的工具和方法 274
- 13.2.4 程序员和bug 276
- 13.3 C语言中的错误处理机制 278
- 13.3.1 错误的检测 278
- 13.3.2 错误的处理方法 280
- 13.4 面向对象语言中的异常处理机制 281
- 13.4.1 返回值返回错误的缺点 281
- 13.4.2 异常处理简介 283
- 13.4.3 异常处理一般策略 285
- 13.5 本章小结 287
- 第14章 进阶之路 289
- 14.1 程序的效率 289
- 14.2 C语言的使用原则 291
- 14.3 加深对C语言的理解 292
- 14.4 C,C++以及C#(java) 294
- 14.5 我们现在在哪里? 296
- 14.6 计算机领域的继续学习 298
- 参考文献 301