本书面向已经了解C语言基础知识的读者,集中讨论C语言的核心部分—函数的设计。这将涉及指针、数组、函数和多文件编程等知识,最后落脚在如何实现C语言的结构化程序设计,并给出完整的设计实例。
封面图
目录
- 前言
- 第1章引入指针变量1
- 1.1变量的三要素1
- 1.2变量的操作4
- 1.3指针变量5
- 1.4指针类型11
- 第2章指针基础知识13
- 2.1指针运算符13
- 2.2指针移动16
- 2.3指针地址的有效性21
- 2.4指针的初始化26
- 2.5指针相等29
- 2.6对指针使用const限定符32
- 2.7使用动态内存35
- 2.7.1动态内存分配函数36
- 2.7.2内存分配实例37
- 2.7.3NULL指针39
- 第3章一维数组40
- 3.1一维数值数组40
- 3.2一维字符串数组44
- 3.3使用一维数组容易出现的错误46
- 3.3.1一维数组越界错误46
- 3.3.2一维数组初始化错误49
- 3.3.3数组赋值错误50
- 3.3.4求值顺序产生歧义错误53
- 3.4综合实例54
- 第4章指针与数组59
- 4.1数组与指针的关系59
- 4.2一维字符串数组与指针61
- 4.3字符串常量63
- 4.4指针数组64
- 4.5配合使用一维数组与指针65
- 4.5.1使用一维数组名简化操作65
- 4.5.2使用指针操作一维数值数组66
- 4.5.3使用一维字符数组73
- 4.5.4指针初始化实例74
- 4.6动态内存分配与非数组的指针75
- 4.7二维数组与指针79
- 4.7.1二维数组79
- 4.7.2二维数组操作实例82
- 4.7.3二维数组与指针的关系85
- 4.7.4二维数组与指向一维数组的指针90
- 4.7.5二维字符串数组91
- 4.8综合设计实例95
- 4.8.1使用数组求解96
- 4.8.2使用动态内存求解99
- 4.8.3使用二级字符串指针求解101
- 第5章函数基础知识103
- 5.1函数103
- 5.1.1函数和函数原型104
- 5.1.2函数值和return语句104
- 5.1.3函数调用形式106
- 5.1.4函数参数的基础知识108
- 5.1.5被调用函数的返回位置114
- 5.2C程序的典型结构114
- 5.2.1单文件结构114
- 5.2.2一个源文件和一个头文件115
- 5.2.3多文件结构117
- 5.3变量的作用域121
- 5.3.1单文件里的块结构及函数122
- 5.3.2单文件多函数的变量131
- 5.3.3多文件变量作用域133
- 5.4变量的存储地址分配135
- 5.4.1单文件变量的存储地址分配135
- 5.4.2多文件变量的存储地址分配139
- 5.5main函数原型及命令行参数140
- 第6章函数设计143
- 6.1函数设计的一般原则143
- 6.1.1函数设计基础143
- 6.1.2函数设计的注意事项144
- 6.1.3函数的一般结构149
- 6.2函数的返回值157
- 6.2.1无返回值的void类型函数157
- 6.2.2非void类型的函数必须返回一个值159
- 6.2.3使用临时变量作为返回值的函数159
- 6.2.4不能使用临时数组名作为返回值160
- 6.2.5返回临时指针必须是首地址161
- 6.2.6返回结构的函数162
- 6.2.7返回结构指针的函数163
- 6.2.8返回枚举的函数164
- 6.3函数参数的传递方式166
- 6.3.1传数值166
- 6.3.2传地址值168
- 6.4函数指针180
- 6.5理解函数声明183
- 6.5.1词法分析中的“贪心法”183
- 6.5.2克服语法“陷阱”读懂函数185
- 6.6函数设计举例190
- 6.6.1完璧归赵190
- 6.6.2多余的参数193
- 6.6.3传递的参数与函数参数匹配问题195
- 6.6.4等效替换参数198
- 6.6.5设计状态机函数200
- 第7章函数设计实例204
- 7.1函数的类型和返回值204
- 7.1.1函数的类型应力求简单204
- 7.1.2实参要与函数形参的类型匹配206
- 7.1.3正确设计函数的返回方式208
- 7.1.4正确区别指针函数和函数指针214
- 7.2正确选择函数参数219
- 7.2.1使用结构作为参数219
- 7.2.2使用键盘为参数赋值222
- 7.2.3结构的内存分配226
- 7.3算法基本概念227
- 7.4使用库函数229
- 7.5设计实例230
- 7.5.1递推与递归230
- 7.5.2递推求解切饼问题233
- 7.5.3八皇后问题235
- 7.5.4疑案求解242
- 7.5.5二分查找247
- 7.5.6汉诺塔问题248
- 7.5.7青蛙过河251
- 7.5.8猜数游戏253
- 7.5.9生死游戏255
- 7.5.10最短路径263
- 第8章多文件中的函数设计272
- 8.1C语言预处理器272
- 8.1.1宏定义与const修饰符272
- 8.1.2文件包含274
- 8.1.3条件编译274
- 8.2模块化程序设计基础276
- 8.2.1模块化程序设计276
- 8.2.2分块开发276
- 8.2.3工程文件279
- 8.2.4函数设计的注意事项279
- 8.3使用两个文件的设计实例286
- 8.3.1设计题目和实现方法286
- 8.3.2算法和函数设计286
- 8.3.3完整源程序290
- 8.3.4组成工程并运行程序292
- 8.4使用3个文件的设计实例293
- 8.4.1设计思想293
- 8.4.2算法分析293
- 8.4.3完整源程序297
- 8.4.4程序运行301
- 8.5使用条件编译的多文件设计实例302
- 8.5.1实现功能302
- 8.5.2设计思想303
- 8.5.3参考程序305
- 8.5.4程序运行310
- 第9章多文件综合设计实例314
- 9.1使用链表设计一个小型通讯录程序314
- 9.1.1功能设计要求314
- 9.1.2设计思想315
- 9.1.3程序设计318
- 9.1.4运行示范327
- 9.2使用数组设计一个实用的小型学生成绩管理程序332
- 9.2.1功能设计要求332
- 9.2.2总体设计334
- 9.2.3函数设计335
- 9.2.4参考程序339
- 9.2.5运行示范356
- 第10章设计游戏程序实例365
- 10.1剪刀、石头、布365
- 10.1.1设计思想365
- 10.1.2参考程序367
- 10.1.3运行示范369
- 10.2迷宫370
- 10.2.1设计思想370
- 10.2.2参考程序371
- 10.2.3运行示范373
- 10.3空战375
- 10.3.1设计思想375
- 10.3.2参考程序376
- 10.4贪吃蛇381
- 10.4.1供改造的源程序381
- 10.4.2运行示范387
- 10.5停车场388
- 10.5.1参考程序388
- 10.5.2运行示范393
- 10.6画矩形393
- 10.6.1用C语言编写Windows程序394
- 10.6.2Windows的程序结构398
- 10.6.3用C语言编写画矩形程序400
- 10.7俄罗斯方块405
- 10.7.1基本游戏规则405
- 10.7.2基本操作方法406
- 10.7.3编写游戏交互界面问题406
- 10.7.4用C语言编写控制台俄罗斯方块游戏407
- 10.7.5编写Windows俄罗斯方块游戏419
- 10.8用C语言编写Windows下的贪吃蛇游戏430
- 10.8.1程序清单430
- 10.8.2运行示范442
- 附录7位ASCII码表444
- 参考文献445