第12章 存储类别、链接和内存管理 511
存储类别 511
作用域 513
链接 515
存储期 516
自动变量 518
寄存器变量 522
块作用域的静态变量 522
外部链接的静态变量 524
内部链接的静态变量 529
多文件 530
存储类别说明符 530
存储类别和函数 533
存储类别的选择 534
随机数函数和静态变量 534
掷骰子 538
分配内存:malloc()和free() 543
free()的重要性 547
calloc()函数 548
动态内存分配和变长数组 548
存储类别和动态内存分配 549
ANSI C类型限定符 551
const类型限定符 552
volatile类型限定符 554
restrict类型限定符 555
_Atomic类型限定符(C11) 556
旧关键字的新位置 557
关键概念 558
本章小结 558
复习题 559
编程练习 561
第13章 文件输入/输出 565
与文件进行通信 565
文件是什么 566
文本模式和二进制模式 566
I/O的级别 568
标准文件 568
标准I/O 568
检查命令行参数 569
fopen()函数 570
getc()和putc()函数 572
文件结尾 572
fclose()函数 574
指向标准文件的指针 574
一个简单的文件压缩程序 574
文件I/O:fprintf()、fscanf()、fgets()和fputs() 576
fprintf()和fscanf()函数 576
fgets()和fputs()函数 578
随机访问:fseek()和ftell() 579
fseek()和ftell()的工作原理 580
二进制模式和文本模式 582
可移植性 582
fgetpos()和fsetpos()函数 583
标准I/O的机理 583
其他标准I/O函数 584
int ungetc(int c,FILE*fp)函数 585
int fflush()函数 585
int setvbuf()函数 585
二进制I/O:fread()和fwrite() 586
size_t fwrite()函数 588
size_t fread()函数 588
int feof(FILE*fp)和int ferror(FILE*fp)函数 589
一个程序示例 589
用二进制I/O进行随机访问 593
关键概念 594
本章小结 595
复习题 596
编程练习 598
第14章 结构和其他数据形式 601
示例问题:创建图书目录 601
建立结构声明 604
定义结构变量 604
初始化结构 606
访问结构成员 607
结构的初始化器 607
结构数组 608
声明结构数组 611
标识结构数组的成员 612
程序讨论 612
嵌套结构 613
指向结构的指针 615
声明和初始化结构指针 617
用指针访问成员 617
向函数传递结构的信息 618
传递结构成员 618
传递结构的地址 619
传递结构 621
其他结构特性 622
结构和结构指针的选择 626
结构中的字符数组和字符指针 627
结构、指针和malloc() 628
复合字面量和结构(C99) 631
伸缩型数组成员(C99) 633
匿名结构(C11) 636
使用结构数组的函数 637
把结构内容保存到文件中 639
保存结构的程序示例 640
程序要点 643
链式结构 644
联合简介 645
使用联合 646
匿名联合(C11) 647
枚举类型 649
enum常量 649
默认值 650
赋值 650
enum的用法 650
共享名称空间 652
typedef简介 653
其他复杂的声明 655
函数和指针 657
关键概念 665
本章小结 665
复习题 666
编程练习 669
第15章 位操作 673
二进制数、位和字节 674
二进制整数 674
有符号整数 675
二进制浮点数 676
其他进制数 676
八进制 677
十六进制 677
C按位运算符 678
按位逻辑运算符 678
用法:掩码 680
用法:打开位(设置位) 681
用法:关闭位(清空位) 682
用法:切换位 683
用法:检查位的值 683
移位运算符 684
编程示例 685
另一个例子 688
位字段 690
位字段示例 692
位字段和按位运算符 696
对齐特性(C11) 703
关键概念 705
本章小结 706
复习题 706
编程练习 708
第16章 C预处理器和C库 711
翻译程序的第一步 712
明示常量:#define 713
记号 717
重定义常量 717
在#define中使用参数 718
用宏参数创建字符串:#运算符 721
预处理器粘合剂:##运算符 722
变参宏:...和...VA ARGS__ 723
宏和函数的选择 725
文件包含:#include 726
头文件示例 727
使用头文件 729
其他指令 730
#undef指令 731
从C预处理器角度看已定义 731
条件编译 731
预定义宏 737
#line和#error 738
#pragma 739
泛型选择(C11) 740
内联函数(C99) 741
_Noreturn函数(C11) 744
C库 744
访问C库 745
使用库描述 746
数学库 747
三角问题 748
类型变体 750
tgmath.h库(C99) 752
通用工具库 753
exit()和atexit()函数 753
qsort()函数 755
断言库 760
assert的用法 760
_Static_assert(C11) 762
string.h库中的memcpy()和memmove() 763
可变参数:stdarg.h 765
关键概念 768
本章小结 768
复习题 768
编程练习 770
第17章 高级数据表示 773
研究数据表示 774
从数组到链表 777
使用链表 781
反思 786
抽象数据类型(ADT) 786
建立抽象 788
建立接口 789
使用接口 793
实现接口 796
队列ADT 804
定义队列抽象数据类型 804
定义一个接口 805
实现接口数据表示 806
测试队列 815
用队列进行模拟 818
链表和数组 824
二叉查找树 828
二叉树ADT 829
二叉查找树接口 830
二叉树的实现 833
使用二叉树 849
树的思想 854
其他说明 856
关键概念 856
本章小结 857
复习题 857
编程练习 858
附录A 复习题答案 861
第1章 复习题答案 861
第2章 复习题答案 862
第3章 复习题答案 863
第4章 复习题答案 866
第5章 复习题答案 869
第6章 复习题答案 872
第7章 复习题答案 876
第8章 复习题答案 879
第9章 复习题答案 881
第10章 复习题答案 883
第11章 复习题答案 886
第12章 复习题答案 890
第13章 复习题答案 891
第14章 复习题答案 894
第15章 复习题答案 898
第16章 复习题答案 899
第17章 复习题答案 901
附录B 参考资料 905
参考资料Ⅰ:补充阅读 905
在线资源 905
C语言书籍 907
编程书籍 907
参考书籍 908
C++书籍 908
参考资料Ⅱ:C运算符 908
算术运算符 909
关系运算符 910
赋值运算符 910
逻辑运算符 911
条件运算符 911
与指针有关的运算符 912
符号运算符 912
结构和联合运算符 912
按位运算符 913
混合运算符 914
参考资料Ⅲ:基本类型和存储类别 915
总结:基本数据类型 915
总结:如何声明一个简单变量 917
总结:限定符 919
参考资料Ⅳ:表达式、语句和程序流 920
总结:表达式和语句 920
总结:while语句 921
总结:for语句 921
总结:do while语句 922
总结:if语句 923
带多重选择的switch语句 924
总结:程序跳转 925
参考资料Ⅴ:新增C99和C11的ANSI C库 926
断言:assert.h 926
复数:complex.h(C99) 927
字符处理:ctype.h 929
错误报告:errno.h 930
浮点环境:fenv.h(C99) 930
浮点特性:float.h 933
整数类型的格式转换:inttypes.h 935
可选拼写:iso64 6.h 936
本地化:locale.h 936
数学库:math.h 939
非本地跳转:setjmp.h 945
信号处理:signal.h 945
对齐:stdalign.h(C11) 946
可变参数:stdarg.h 947
原子支持:stdatomic.h(C11) 948
布尔支持:stdbool.h(C99) 948
通用定义:stddef.h 948
整数类型:stdint.h 949
标准I/O库:stdio.h 953
通用工具:stdlib.h 956
_Noreturn:stdnoreturn.h 962
处理字符串:string.h 962
通用类型数学:tgmath.h(C99) 965
线程:threads.h(C11) 967
日期和时间:time.h 967
统一码工具:uchar.h(C11) 971
扩展的多字节字符和宽字符工具:wchar.h(C99) 972
宽字符分类和映射工具:wctype.h(C99) 978
参考资料Ⅵ:扩展的整数类型 980
精确宽度类型 981
最小宽度类型 982
最快最小宽度类型 983
最大宽度类型 983
可储存指针值的整型 984
扩展的整型常量 984
参考资料Ⅶ:扩展字符支持 984
三字符序列 984
双字符 985
可选拼写:iso646.h 986
多字节字符 986
通用字符名(UCN) 987
宽字符 988
宽字符和多字节字符 989
参考资料Ⅷ:C99/C1 1数值计算增强 990
IEC浮点标准 990
fenv.h头文件 994
STDC FP_CONTRACT编译指示 995
math.h库增补 995
对复数的支持 996
参考资料Ⅸ:C和C++的区别 998
函数原型 999
char常量 1000
const限定符 1000
结构和联合 1001
枚举 1002
指向void的指针 1002
布尔类型 1003
可选拼写 1003
宽字符支持 1003
复数类型 1003
内联函数 1003
C++11中没有的C99/C11特性 1004