目录

C 语言知识点大纲(参考《C primer plus》)


目录

C 语言知识点大纲(参考《C primer plus》)

1 第1章 初识 C语言

1.1 C语言的起源

1.2 选择C语言的理由

  • 设计特性
  • 高效性
  • 可移植性
  • 强大而灵活
  • 面向程序员
  • 缺点

1.3 C语言的应用范围

1.4 计算机能做什么

1.5 高级计算机语言和编译器

1.6 语言标准

  • 第1个ANSI/ISO C标准
  • C99标准
  • C11标准

1.7 使用C语言的7个步骤

  • 第1步:定义程序的目标
  • 第2步:设计程序 7
  • 第3步:编写代码
  • 第4步:编译
  • 第5步:运行程序
  • 第6步:测试和调试程序
  • 第7步:维护和修改代码
  • 说明

1.8 编程机制

  • 目标代码文件、可执行文件和库
  • UNIX系统
  • GNU编译器集合和 LLVM项目
  • Linux系统
  • PC的命令行编译器
  • 集成开发环境(Windows)
  • Windows/Linux
  • Macintosh中的C

2 第2章 C语言概述

2.1 简单的C程序示例

2.2 提高程序可读性的技巧

2.3 进一步使用C

  • 程序说明
  • 多条声明
  • 打印多个值

2.4 多个函数

2.5 调试程序

  • 语法错误
  • 语义错误
  • 程序状态

2.6 关键字和保留标识符

3 第3章 数据和C

3.1 变量与常量数据

3.2 数据:数据类型关键字

  • 整数
  • 浮点数

3.3 C语言基本数据类型

  • int类型
  • 其他整数类型
  • 使用字符:char类型
  • _Bool类型
  • 可移植类型: stdint.h和inttypes.h
  • float、double和long double
  • 复数和虚数类型
  • 其他类型
  • 类型大小

3.4 使用数据类型

3.5 参数和陷阱

3.6 转义序列示例

  • 程序运行情况
  • 刷新输出

4 第4章 字符串和格式化输入/输出

4.1 字符串简介

  • char类型数组和null字符
  • 使用字符串
  • strlen()函数

4.2 常量和C预处理器

  • 明示常量
  • const限定符

4.3 printf()和scanf()

  • printf()函数
  • 使用printf()
  • printf()的转换说明修饰符
  • 转换说明的意义
  • 使用scanf()
  • printf()和scanf()的修饰符
  • printf() 的用法提

5 第5章 运算符、表达式和语句

5.1 循环简介

5.2 基本运算符

  • 赋值运算符:=
  • 加法运算符:+
  • 减法运算符:-
  • 符号运算符:-和+
  • 乘法运算符:*
  • 除法运算符:/
  • 运算符优先级
  • 优先级和求值顺序

5.3 其他运算符

  • sizeof运算符和size_t类型
  • 求模运算符:%
  • 递增运算符:++
  • 递减运算符:–
  • 优先级

5.4 表达式和语句

  • 表达式
  • 语句
  • 复合语句(块)

5.5 类型转换

5.6 带参数的函数

6 第6章 C控制语句:循环

6.1 再探while循环

  • 程序注释
  • C风格读取循环

6.2 while语句

  • 终止while循环
  • 何时终止循环
  • while:入口条件循环
  • 语法要点

6.3 用关系运算符和表达式比较大小

  • 什么是真
  • 其他真值
  • 真值的问题
  • 新的_Bool类型
  • 优先级和关系运算

6.4 不确定循环和计数循环

6.5 for循环

6.6 其他赋值运算符:+=、-=、*=、/=、%=

6.7 逗号运算符

6.8 出口条件循环:do while

6.9 如何选择循环

6.10 嵌套循环

  • 程序分析
  • 嵌套变式

6.11 数组简介

6.12 使用函数返回值的循环示例

7 第7章 C控制语句:分支和跳转

7.1 if语句

7.2 if else语句

  • ctype.h系列的字符函数
  • 多重选择else if
  • else与if配对
  • 多层嵌套的if语句

7.3 逻辑运算符

  • 优先级
  • 求值顺序
  • 范围

7.4 一个统计单词的程序

7.5 条件运算符:?:

7.6 循环辅助:continue和break

  • continue语句
  • break语句

7.7 多重选择:switch和break

  • switch语句
  • 只读每行的首字符
  • 多重标签
  • switch和if els

7.8 goto语句

8 第8章 字符输入/输出和输入验证

8.1 单字符I/O:getchar()和putchar()

8.2 缓冲区

8.3 结束键盘输入

  • 文件、流和键盘输入
  • 文件结尾

8.4 重定向和文件

8.5 创建更友好的用户界面

  • 使用缓冲输入
  • 混合数值和字符输入

8.6 输入验证

  • 分析程序
  • 输入流和数字

8.7 混合字符和数值输入

9 第9章 函数

9.1 初识函数

  • 创建并使用简单函数
  • 分析程序
  • 函数参数
  • 定义带形式参数的函数
  • 声明带形式参数函数的原型
  • 调用带实际参数的函数
  • 黑盒视角
  • 使用return从函数中返回值
  • 函数类型

9.2 ANSI C函数原型

  • 问题所在
  • ANSI的解决方案
  • 无参数和未指定参数
  • 函数原型的优点

9.3 递归

  • 演示递归
  • 递归的基本原理
  • 尾递归
  • 递归和倒序计算
  • 递归的优缺点

9.4 编译多源代码文件的程序

  • UNIX
  • Linux
  • DOS命令行编译
  • Windows和苹果的IDE编译器
  • 使用头文件

9.5 查找地址:&运算符

9.6 更改主调函数中的变量

9.7 指针简介

  • 间接运算符:*
  • 声明指针
  • 使用指针在函数间通信

10 第10章 数组和指针

10.1 数组

  • 初始化数组
  • 指定初始化器
  • 给数组元素赋值
  • 数组边界
  • 指定数组的大小

10.2 多维数组

  • 初始化二维数组
  • 其他多维数组

10.3 指针和数组

10.4 函数、数组和指针

  • 使用指针形参
  • 指针表示法和数组表示法

10.5 指针操作

10.6 保护数组中的数据

  • 对形式参数使用const
  • const的其他内容

10.7 指针和多维数组

  • 指向多维数组的指针
  • 指针的兼容性
  • 函数和多维数组

10.8 变长数组(VLA)

10.9 复合字面量

11 第11章 字符串和字符串函数

11.1 表示字符串和字符串I/O

  • 在程序中定义字符串
  • 指针和字符串

11.2 字符串输入

  • 分配空间
  • 不幸的gets()函数
  • gets()的替代品
  • scanf()函数

11.3 字符串输出

  • puts()函数
  • fputs()函数
  • printf()函数

11.4 自定义输入/输出函数

11.5 字符串函数

  • strlen()函数
  • strcat()函数
  • strncat()函数
  • strcmp()函数
  • strcpy()和strncpy() 函数
  • sprintf()函数
  • 其他字符串函数

11.6 字符串示例:字符串排序

  • 排序指针而非字符串
  • 选择排序算法

11.7 ctype.h字符函数和字符串

11.8 命令行参数

  • 集成环境中的命令行参数
  • Macintosh中的命令行参数

11.9 把字符串转换为数字

12 第12章 存储类别、链接和内存管理

12.1 存储类别

  • 作用域
  • 链接
  • 存储期
  • 自动变量
  • 寄存器变量
  • 块作用域的静态变量
  • 外部链接的静态变量
  • 内部链接的静态变量
  • 多文件
  • 存储类别说明符
  • 存储类别和函数
  • 存储类别的选择

12.2 随机数函数和静态变量

12.3 实例:掷骰子

12.4 分配内存:malloc()和free()

  • free()的重要性
  • calloc()函数
  • 动态内存分配和变长数组
  • 存储类别和动态内存分配

12.5 ANSI C类型限定符

  • const类型限定符
  • volatile类型限定符
  • restrict类型限定符
  • _Atomic类型限定符( C11)
  • 旧关键字的新位置

13 第13章 文件输入/输出

13.1 与文件进行通信

  • 文件是什么
  • 文本模式和二进制模式
  • I/O的级别
  • 标准文件

13.2 标准I/O

  • 检查命令行参数
  • fopen()函数
  • getc()和putc()函数
  • 文件结尾
  • fclose()函数
  • 指向标准文件的指针

13.3 实例:一个简单的文件压缩程序

13.4 文件I/O:fprintf()、fscanf()、fgets()和fputs()

  • fprintf()和fscanf() 函数
  • fgets()和fputs()函数

13.5 随机访问:fseek()和ftell()

  • fseek()和ftell()的工作原理
  • 二进制模式和文本模式
  • 可移植性
  • fgetpos()和fsetpos()函数

13.6 标准I/O的机理

13.7 其他标准I/O函数

  • int ungetc(int c, FILE *fp)函数
  • int fflush()函数
  • int setvbuf()函数
  • 二进制I/O:fread()和fwrite()
  • size_t fwrite()函数
  • size_t fread()函数
  • int feof(FILE *fp)和int ferror(FILE *fp)函数
  • 一个程序示例
  • 用二进制I/O进行随机访问

14 第14章 结构和其他数据形式

14.1 建立结构声明

14.2 定义结构变量

  • 初始化结构
  • 访问结构成员
  • 结构的初始化器

14.3 结构数组

  • 声明结构数组
  • 标识结构数组的成员
  • 程序讨论

14.4 嵌套结构

14.5 指向结构的指针

  • 声明和初始化结构指针
  • 用指针访问成员

14.6 向函数传递结构的信息

  • 传递结构成员
  • 传递结构的地址
  • 传递结构
  • 其他结构特性
  • 结构和结构指针的选择
  • 结构中的字符数组和字符指针
  • 结构、指针和malloc()
  • 复合字面量和结构(C99)
  • 伸缩型数组成员(C99)
  • 匿名结构(C11)
  • 使用结构数组的函数

14.7 把结构内容保存到文件中

  • 保存结构的程序示例
  • 程序要点

14.8 链式结构

14.9 联合简介

  • 使用联合
  • 匿名联合(C11)

14.10 枚举类型

  • enum 常量
  • 默认值
  • 赋值
  • enum 的用法
  • 共享名称空间

14.11 typedef简介

14.12 其他复杂的声明

14.13 函数和指针

15 第15章 位操作

15.1 二进制数、位和字节

  • 二进制整数
  • 有符号整数
  • 二进制浮点数

15.2 其他进制数

  • 八进制
  • 十六进制

15.3 C按位运算符

  • 按位逻辑运算符
  • 用法:掩码
  • 用法:打开位(设置位)
  • 用法:关闭位(清空位)
  • 用法:切换位
  • 用法:检查位的值
  • 移位运算符

15.4 位字段

  • 位字段示例
  • 位字段和按位运算符

15.5 对齐特性(C11)

16 第16章 C预处理器和C库

16.1 翻译程序的第一步

16.2 明示常量:define

  • 记号
  • 重定义常量

16.3 在define中使用参数

  • 用宏参数创建字符串:#运算符
  • 预处理器黏合剂:##运算符
  • 变参宏:…和_ VA_ARGS _

16.4 宏和函数的选择

16.5 文件包含:include

  • 定义头文件
  • 使用头文件

16.6 其他指令

  • #undef指令
  • 从C预处理器角度看已定义
  • 条件编译
  • 预定义宏
  • #line和#error
  • #pragma
  • 泛型选择(C11)

16.7 内联函数(C99)

16.8 _Noreturn函数(C11)

16.9 C库

  • 访问C库
  • 使用库描述

16.10 数学库

  • 三角问题
  • 类型变体
  • tgmath.h库(C99)

16.11 通用工具库

  • exit()和atexit()函数
  • qsort()函数

16.12 断言库

  • assert的用法
  • _Static_assert

16.13 string.h库中的memcpy()和memmove()

16.14 可变参数:stdarg.h

17 第17章 高级数据表示

17.1 研究数据表示

17.2 从数组到链表

17.3 抽象数据类型(ADT)

  • 建立抽象
  • 建立接口
  • 使用接口
  • 实现接口

17.4 队列ADT

  • 定义队列抽象数据类型
  • 定义一个接口
  • 实现接口数据表示
  • 测试队列

17.5 用队列进行模拟

17.6 链表和数组

17.7 二叉查找树

  • 二叉树ADT
  • 二叉查找树接口
  • 二叉树的实现
  • 使用二叉树
  • 树的思想