第1章 看不见的错误输入
1-1 看不见的错误
看不见的错误
难以察觉的错误
容易忽略的错误
预处理指令中的空白字符
#if指令和注释
头文件保护符
函数式宏及其运行效率
函数式宏的副作用
C++中max2的实现
1-2 初始化
初始化和赋值
对象
自动存储期
静态存储期
标识符的有效范围和初始化
数组的初始化
多维数组的初始化
使用typedef名的数组的初始化
第2章 类型转换
2-1 类型转换
-1和1哪个大?
if语句的求值
关系运算符和关系式
相等运算符和等式
if语句的控制表达式
隐式类型转换
普通算术类型转换
2-2 有符号整数和无符号整数
无符号整数在内存中的表示
有符号整数在内存中的表示
整型提升
有符号整数和无符号整数之间的类型转换
问题的解决
补码表示的有符号整数到无符号整数的类型转换
第3章 关于指针
3-1 指针和地址
地址和取址运算符
指针和间接运算符
3-2 指针和函数调用
值传递
传递指针给函数
传递指针的指针给函数
3-3 指针和数组
数组的传递
表示数组末尾的哨兵
指针、数组和数据类型
3-4 指针和多维数组
数据类型的派生和多维数组
多维数组和指针
3-5 动态对象的生成
动态存储期
void指针
单个对象的生成
数组对象的生成
多维数组对象的生成
第4章 字符串和指针
4-1 字符和字符串
字符和字符串
字符和字符常量
字符的值
字符串
字符串字面量
字符串字面量和字符串常量
用指针实现的字符串的操作
指向字符串的指针
字符串数组
4-2 字符串的处理
字符串的复制
字符串不能为空?
使字符串为空的两种方法
使字符串为空的错误方法
问题的解决
存储空间的清空
字符串的动态生成
字符串数组的动态生成
第5章 NULL
5-1 空指令、空字符和空语句
null
空指令
空字符
空字符串
空语句
5-2 空指针和NULL
空指针
空指针常量
返回空指针的函数
空指针在内存中的表示不一定为
第6章 函数的定义和声明
6-1 函数的定义和调用
函数定义的顺序
调用未声明的函数
默认的int型
未声明的函数的处理
老式风格的函数声明
老式风格的函数声明的陷阱
6-2 函数原型声明
函数原型声明
默认参数提升
参数名
可变参数的声明
va_start宏:访问可变参数前的准备
va_arg宏:取出可变参数
va_end宏:结束对可变参数的访问
vprintf函数vfprintf函数:输出到流
第7章 结构体和共用体
7-1 结构体
结构体的基础
成员的访问
结构体对象的初始化
结构体和宏
结构体和typedef声明
相互引用的结构体
7-2 结构体与字节对齐
代码优化
结构体和字节对齐
offsetof宏
7-3 共用体
共用体
共用体对象的初始化
公共初始序列
第8章 文件处理和文本文件
8-1 文本文件
文件和流
文件的打开和关闭
FILE型
输入输出库函数
问题和解决方法
解决方法一:添加无效数据
解决方法二:优化程序
8-2 作为字符的数据
数值的读取
数值和字符串
使用sprintf函数将数据写入字符串
使用sscanf函数从字符串中读取数据
第9章 文件的应用
9-1 流和缓冲区
调用的函数未被执行?
缓冲区的刷新
流的缓冲区
问题的解决
9-2 文本文件和二进制文件
文本和二进制
文件的转储
二进制文件的访问
字节序
换行符的处理
第10章 栈溢出
10-1 栈
栈的实现
10-2 栈溢出
函数调用和栈
数据和栈
栈溢出
检测栈溢出的原理
如果栈被破坏
第11章 库开发的基础
11-1 源文件的分离和链接
单字符输入输出库
队列
库的使用示例
分离式编译
链接性
11-2 库开发
源文件的分离
正确的示例
第12章 线性表的应用
12-1 线性表
线性表
节点的实现
线性表的特点
线性表的实现
线性表存储空间的动态分配
12-2 用数组实现的线性表
用数组实现的线性表
删除的记录的管理
12-3 带索引的线性表
带索引的线性表
索引表
第13章 二叉查找树的应用
13-1 二叉查找树
二叉查找树
二叉查找树和线性表
13-2 非递归查找及其应用
递归的过程
递归函数的非递归实现
问题的解决
第14章 控制台的操作
14-1 转义序列
转义序列
14-2 画面控制库
Windows API的使用
展开