展开全部

主编推荐语

重量级C大百科全书中文版最新修订版。

内容简介

本书详细讲解了C语言的基本概念和编程技巧。

《C Primer Plus(第6版)中文版》共17章。第1章、第2章介绍了C语言编程的预备知识。第3章~第15章详细讲解了C语言的相关知识,包括数据类型、格式化输入/输出、运算符、表达式、语句、循环、字符输入和输出、函数、数组和指针、字符和字符串函数、内存管理、文件输入和输出、结构、位操作等。第16章、第17章介绍C预处理器、C库和高级数据表示。本书以丰富多样的程序为例,讲解C语言的知识要点和注意事项。每章末尾设计了大量复习题和编程练习,帮助读者巩固所学知识和提高实际编程能力。附录给出了各章复习题的参考答案和丰富的参考资料。

《C Primer Plus(第6版)中文版》可作为C语言的教材,适用于需要系统学习C语言的初学者,也适用于想要巩固C语言知识或希望进一步提高编程技术的程序员。

目录

  • 版权信息
  • 内容提要
  • 作者简介
  • 献辞
  • 致谢
  • 前言
  • 资源与支持
  • 配套资源
  • 提交勘误
  • 专享优惠
  • 与我们联系
  • 关于异步社区和异步图书
  • 第1章 初识C语言
  • 1.1 C语言的起源
  • 1.2 选择C语言的理由
  • 1.2.1 设计特性
  • 1.2.2 高效性
  • 1.2.3 可移植性
  • 1.2.4 强大而灵活
  • 1.2.5 面向程序员
  • 1.2.6 缺点
  • 1.3 C语言的应用范围
  • 1.4 计算机能做什么
  • 1.5 高级计算机语言和编译器
  • 1.6 语言标准
  • 1.6.1 第1个ANSI/ISO C标准
  • 1.6.2 C99标准
  • 1.6.3 C11标准
  • 1.7 使用C语言的7个步骤
  • 1.7.1 第1步:定义程序的目标
  • 1.7.2 第2步:设计程序
  • 1.7.3 第3步:编写代码
  • 1.7.4 第4步:编译
  • 1.7.5 第5步:运行程序
  • 1.7.6 第6步:测试和调试程序
  • 1.7.7 第7步:维护和修改代码
  • 1.7.8 说明
  • 1.8 编程机制
  • 1.8.1 目标代码文件、可执行文件和库
  • 1.8.2 UNIX系统
  • 1.8.3 GNU编译器集合和LLVM项目
  • 1.8.4 Linux系统
  • 1.8.5 PC的命令行编译器
  • 1.8.6 集成开发环境(Windows)
  • 1.8.7 Windows/Linux
  • 1.8.8 Macintosh中的C
  • 1.9 本书的组织结构
  • 1.10 本书的约定
  • 1.10.1 字体
  • 1.10.2 程序输出
  • 1.10.3 特殊元素
  • 1.11 本章小结
  • 1.12 复习题
  • 1.13 编程练习
  • 第2章 C语言概述
  • 2.1 简单的C程序示例
  • 2.2 示例解释
  • 2.2.1 第1遍:快速概要
  • 2.2.2 第2遍:程序细节
  • 2.3 简单程序的结构
  • 2.4 提高程序可读性的技巧
  • 2.5 进一步使用C
  • 2.5.1 程序说明
  • 2.5.2 多条声明
  • 2.5.3 乘法
  • 2.5.4 打印多个值
  • 2.6 多个函数
  • 2.7 调试程序
  • 2.7.1 语法错误
  • 2.7.2 语义错误
  • 2.7.3 程序状态
  • 2.8 关键字和保留标识符
  • 2.9 关键概念
  • 2.10 本章小结
  • 2.11 复习题
  • 2.12 编程练习
  • 第3章 数据和C
  • 3.1 示例程序
  • 3.1.1 程序中的新元素
  • 3.2 变量与常量数据
  • 3.3 数据:数据类型关键字
  • 3.3.1 整数和浮点数
  • 3.3.2 整数
  • 3.3.3 浮点数
  • 3.4 C语言基本数据类型
  • 3.4.1 int类型
  • 3.4.2 其他整数类型
  • 3.4.3 使用字符:char类型
  • 3.4.4 _Bool类型
  • 3.4.5 可移植类型:stdint.h和inttypes.h
  • 3.4.6 float、double和long double
  • 3.4.7 复数和虚数类型
  • 3.4.8 其他类型
  • 3.4.9 类型大小
  • 3.5 使用数据类型
  • 3.6 参数和陷阱
  • 3.7 转义序列示例
  • 3.7.1 程序运行情况
  • 3.7.2 刷新输出
  • 3.8 关键概念
  • 3.9 本章小结
  • 3.10 复习题
  • 3.11 编程练习
  • 第4章 字符串和格式化输入/输出
  • 4.1 前导程序
  • 4.2 字符串简介
  • 4.2.1 char类型数组和null字符
  • 4.2.2 使用字符串
  • 4.2.3 strlen()函数
  • 4.3 常量和C预处理器
  • 4.3.1 const限定符
  • 4.3.2 明示常量
  • 4.4 printf()和scanf()
  • 4.4.1 printf()函数
  • 4.4.2 使用printf()
  • 4.4.3 printf()的转换说明修饰符
  • 4.4.4 转换说明的意义
  • 4.4.5 使用scanf()
  • 4.4.6 printf()和scanf()的*修饰符
  • 4.4.7 printf()的用法提示
  • 4.5 关键概念
  • 4.6 本章小结
  • 4.7 复习题
  • 4.8 编程练习
  • 第5章 运算符、表达式和语句
  • 5.1 循环简介
  • 5.2 基本运算符
  • 5.2.1 赋值运算符:=
  • 5.2.2 加法运算符:+
  • 5.2.3 减法运算符:-
  • 5.2.4 符号运算符:-和+
  • 5.2.5 乘法运算符:*
  • 5.2.6 除法运算符:/
  • 5.2.7 运算符优先级
  • 5.2.8 优先级和求值顺序
  • 5.3 其他运算符
  • 5.3.1 sizeof运算符和size_t类型
  • 5.3.2 求模运算符:%
  • 5.3.3 递增运算符:++
  • 5.3.4 递减运算符:--
  • 5.3.5 优先级
  • 5.3.6 不要自作聪明
  • 5.4 表达式和语句
  • 5.4.1 表达式
  • 5.4.2 语句
  • 5.4.3 复合语句(块)
  • 5.5 类型转换
  • 5.5.1 强制类型转换运算符
  • 5.6 带参数的函数
  • 5.7 示例程序
  • 5.8 关键概念
  • 5.9 本章小结
  • 5.10 复习题
  • 5.11 编程练习
  • 第6章 C控制语句:循环
  • 6.1 再探while循环
  • 6.1.1 程序注释
  • 6.1.2 C风格读取循环
  • 6.2 while语句
  • 6.2.1 终止while循环
  • 6.2.2 何时终止循环
  • 6.2.3 while:入口条件循环
  • 6.2.4 语法要点
  • 6.3 用关系运算符和表达式比较大小
  • 6.3.1 什么是真
  • 6.3.2 其他真值
  • 6.3.3 真值的问题
  • 6.3.4 新的_Bool类型
  • 6.3.5 优先级和关系运算符
  • 6.4 不确定循环和计数循环
  • 6.5 for循环
  • 6.5.1 利用for的灵活性
  • 6.6 其他赋值运算符:+=、-=、*=、/=、%=
  • 6.7 逗号运算符
  • 6.7.1 当Zeno遇到for循环
  • 6.8 出口条件循环:do while
  • 6.9 如何选择循环
  • 6.10 嵌套循环
  • 6.10.1 程序分析
  • 6.10.2 嵌套变式
  • 6.11 数组简介
  • 6.11.1 在for循环中使用数组
  • 6.12 使用函数返回值的循环示例
  • 6.12.1 程序分析
  • 6.12.2 使用带返回值的函数
  • 6.13 关键概念
  • 6.14 本章小结
  • 6.15 复习题
  • 6.16 编程练习
  • 第7章 C控制语句:分支和跳转
  • 7.1 if语句
  • 7.2 if else语句
  • 7.2.1 另一个示例:介绍getchar()和putchar()
  • 7.2.2 ctype.h系列的字符函数
  • 7.2.3 多重选择else if
  • 7.2.4 else与if配对
  • 7.2.5 多层嵌套的if语句
  • 7.3 逻辑运算符
  • 7.3.1 备选拼写:iso646.h头文件
  • 7.3.2 优先级
  • 7.3.3 求值顺序
  • 7.3.4 范围
  • 7.4 一个统计单词的程序
  • 7.5 条件运算符:?:
  • 7.6 循环辅助:continue和break
  • 7.6.1 continue语句
  • 7.6.2 break语句
  • 7.7 多重选择:switch和break
  • 7.7.1 switch语句
  • 7.7.2 只读每行的首字符
  • 7.7.3 多重标签
  • 7.7.4 switch和if else
  • 7.8 goto语句
  • 7.8.1 避免使用goto
  • 7.9 关键概念
  • 7.10 本章小结
  • 7.11 复习题
  • 7.12 编程练习
  • 第8章 字符输入/输出和输入验证
  • 8.1 单字符I/O:getchar()和putchar()
  • 8.2 缓冲区
  • 8.3 结束键盘输入
  • 8.3.1 文件、流和键盘输入
  • 8.3.2 文件结尾
  • 8.4 重定向和文件
  • 8.4.1 UNIX、Linux和DOS重定向
  • 8.5 创建更友好的用户界面
  • 8.5.1 使用缓冲输入
  • 8.5.2 混合数值和字符输入
  • 8.6 输入验证
  • 8.6.1 分析程序
  • 8.6.2 输入流和数字
  • 8.7 菜单浏览
  • 8.7.1 任务
  • 8.7.2 使执行更顺利
  • 8.7.3 混合字符和数值输入
  • 8.8 关键概念
  • 8.9 本章小结
  • 8.10 复习题
  • 8.11 编程练习
  • 第9章 函数
  • 9.1 复习函数
  • 9.1.1 创建并使用简单函数
  • 9.1.2 分析程序
  • 9.1.3 函数参数
  • 9.1.4 定义带形式参数的函数
  • 9.1.5 声明带形式参数函数的原型
  • 9.1.6 调用带实际参数的函数
  • 9.1.7 黑盒视角
  • 9.1.8 使用return从函数中返回值
  • 9.1.9 函数类型
  • 9.2 ANSI C函数原型
  • 9.2.1 问题所在
  • 9.2.2 ANSI的解决方案
  • 9.2.3 无参数和未指定参数
  • 9.2.4 函数原型的优点
  • 9.3 递归
  • 9.3.1 演示递归
  • 9.3.2 递归的基本原理
  • 9.3.3 尾递归
  • 9.3.4 递归和倒序计算
  • 9.3.5 递归的优缺点
  • 9.4 编译多源代码文件的程序
  • 9.4.1 UNIX
  • 9.4.2 Linux
  • 9.4.3 DOS命令行编译器
  • 9.4.4 Windows和苹果的IDE编译器
  • 9.4.5 使用头文件
  • 9.5 查找地址:&运算符
  • 9.6 更改主调函数中的变量
  • 9.7 指针简介
  • 9.7.1 间接运算符:*
  • 9.7.2 声明指针
  • 9.7.3 使用指针在函数间通信
  • 9.8 关键概念
  • 9.9 本章小结
  • 9.10 复习题
  • 9.11 编程练习
  • 第10章 数组和指针
  • 10.1 数组
  • 10.1.1 初始化数组
  • 10.1.2 指定初始化器(C99)
  • 10.1.3 给数组元素赋值
  • 10.1.4 数组边界
  • 10.1.5 指定数组的大小
  • 10.2 多维数组
  • 10.2.1 初始化二维数组
  • 10.2.2 其他多维数组
  • 10.3 指针和数组
  • 10.4 函数、数组和指针
  • 10.4.1 使用指针形参
  • 10.4.2 指针表示法和数组表示法
  • 10.5 指针操作
  • 10.6 保护数组中的数据
  • 10.6.1 对形式参数使用const
  • 10.6.2 const的其他内容
  • 10.7 指针和多维数组
  • 10.7.1 指向多维数组的指针
  • 10.7.2 指针的兼容性
  • 10.7.3 函数和多维数组
  • 10.8 变长数组(VLA)
  • 10.9 复合字面量
  • 10.10 关键概念
  • 10.11 本章小结
  • 10.12 复习题
  • 10.13 编程练习
  • 第11章 字符串和字符串函数
  • 11.1 表示字符串和字符串I/O
  • 11.1.1 在程序中定义字符串
  • 11.1.2 指针和字符串
  • 11.2 字符串输入
  • 11.2.1 分配空间
  • 11.2.2 不幸的gets()函数
  • 11.2.3 gets()的替代品
  • 11.2.4 scanf()函数
  • 11.3 字符串输出
  • 11.3.1 puts()函数
  • 11.3.2 fputs()函数
  • 11.3.3 printf()函数
  • 11.4 自定义输入/输出函数
  • 11.5 字符串函数
  • 11.5.1 strlen()函数
  • 11.5.2 strcat()函数
  • 11.5.3 strncat()函数
  • 11.5.4 strcmp()函数
  • 11.5.5 strcpy()和strncpy()函数
  • 11.5.6 sprintf()函数
  • 11.5.7 其他字符串函数
  • 11.6 字符串示例:字符串排序
  • 11.6.1 排序指针而非字符串
  • 11.6.2 选择排序算法
  • 11.7 ctype.h字符函数和字符串
  • 11.8 命令行参数
  • 11.8.1 集成环境中的命令行参数
  • 11.8.2 Macintosh中的命令行参数
  • 11.9 把字符串转换为数字
  • 11.10 关键概念
  • 11.11 本章小结
  • 11.12 复习题
  • 11.13 编程练习
  • 第12章 存储类别、链接和内存管理
  • 12.1 存储类别
  • 12.1.1 作用域
  • 12.1.2 链接
  • 12.1.3 存储期
  • 12.1.4 自动变量
  • 12.1.5 寄存器变量
  • 12.1.6 块作用域的静态变量
  • 12.1.7 外部链接的静态变量
  • 12.1.8 内部链接的静态变量
  • 12.1.9 多文件
  • 12.1.10 存储类别说明符
  • 12.1.11 存储类别和函数
  • 12.1.12 存储类别的选择
  • 12.2 随机数函数和静态变量
  • 12.3 掷骰子
  • 12.4 分配内存:malloc()和free()
  • 12.4.1 free()的重要性
  • 12.4.2 calloc()函数
  • 12.4.3 动态内存分配和变长数组
  • 12.4.4 存储类别和动态内存分配
  • 12.5 ANSI C类型限定符
  • 12.5.1 const类型限定符
  • 12.5.2 volatile类型限定符
  • 12.5.3 restrict类型限定符
  • 12.5.4 _Atomic类型限定符(C11)
  • 12.5.5 旧关键字的新位置
  • 12.6 关键概念
  • 12.7 本章小结
  • 12.8 复习题
  • 12.9 编程练习
  • 第13章 文件输入/输出
  • 13.1 与文件进行通信
  • 13.1.1 文件是什么
  • 13.1.2 文本模式和二进制模式
  • 13.1.3 I/O的级别
  • 13.1.4 标准文件
  • 13.2 标准I/O
  • 13.2.1 检查命令行参数
  • 13.2.2 fopen()函数
  • 13.2.3 getc()和putc()函数
  • 13.2.4 文件结尾
  • 13.2.5 fclose()函数
  • 13.2.6 指向标准文件的指针
  • 13.3 一个简单的文件压缩程序
  • 13.4 文件I/O:fprintf()、fscanf()、fgets()和fputs()
  • 13.4.1 fprintf()和fscanf()函数
  • 13.4.2 fgets()和fputs()函数
  • 13.5 随机访问:fseek()和ftell()
  • 13.5.1 fseek()和ftell()的工作原理
  • 13.5.2 二进制模式和文本模式
  • 13.5.3 可移植性
  • 13.5.4 fgetpos()和fsetpos()函数
  • 13.6 标准I/O的机理
  • 13.7 其他标准I/O函数
  • 13.7.1 int ungetc(int c, FILE *fp)函数
  • 13.7.2 int fflush()函数
  • 13.7.3 int setvbuf()函数
  • 13.7.4 二进制I/O:fread()和fwrite()
  • 13.7.5 size_t fwrite()函数
  • 13.7.6 size_t fread()函数
  • 13.7.7 int feof(FILE *fp)和int ferror(FILE *fp)函数
  • 13.7.8 一个程序示例
  • 13.7.9 用二进制I/O进行随机访问
  • 13.8 关键概念
  • 13.9 本章小结
  • 13.10 复习题
  • 13.11 编程练习
  • 第14章 结构和其他数据形式
  • 14.1 示例问题:创建图书目录
  • 14.2 建立结构声明
  • 14.3 定义结构变量
  • 14.3.1 初始化结构
  • 14.3.2 访问结构成员
  • 14.3.3 结构的初始化器
  • 14.4 结构数组
  • 14.4.1 声明结构数组
  • 14.4.2 标识结构数组的成员
  • 14.4.3 程序讨论
  • 14.5 嵌套结构
  • 14.6 指向结构的指针
  • 14.6.1 声明和初始化结构指针
  • 14.6.2 用指针访问成员
  • 14.7 向函数传递结构的信息
  • 14.7.1 传递结构成员
  • 14.7.2 传递结构的地址
  • 14.7.3 传递结构
  • 14.7.4 其他结构特性
  • 14.7.5 结构和结构指针的选择
  • 14.7.6 结构中的字符数组和字符指针
  • 14.7.7 结构、指针和malloc()
  • 14.7.8 复合字面量和结构(C99)
  • 14.7.9 伸缩型数组成员(C99)
  • 14.7.10 匿名结构(C11)
  • 14.7.11 使用结构数组的函数
  • 14.8 把结构内容保存到文件中
  • 14.8.1 保存结构的程序示例
  • 14.8.2 程序要点
  • 14.9 链式结构
  • 14.10 联合简介
  • 14.10.1 使用联合
  • 14.10.2 匿名联合(C11)
  • 14.11 枚举类型
  • 14.11.1 enum常量
  • 14.11.2 默认值
  • 14.11.3 赋值
  • 14.11.4 enum的用法
  • 14.11.5 共享名称空间
  • 14.12 typedef简介
  • 14.13 其他复杂的声明
  • 14.14 函数和指针
  • 14.15 关键概念
  • 14.16 本章小结
  • 14.17 复习题
  • 14.18 编程练习
  • 第15章 位操作
  • 15.1 二进制数、位和字节
  • 15.1.1 二进制整数
  • 15.1.2 有符号整数
  • 15.1.3 二进制浮点数
  • 15.2 其他进制数
  • 15.2.1 八进制
  • 15.2.2 十六进制
  • 15.3 C按位运算符
  • 15.3.1 按位逻辑运算符
  • 15.3.2 用法:掩码
  • 15.3.3 用法:打开位(设置位)
  • 15.3.4 用法:关闭位(清空位)
  • 15.3.5 用法:切换位
  • 15.3.6 用法:检查位的值
  • 15.3.7 移位运算符
  • 15.3.8 编程示例
  • 15.3.9 另一个例子
  • 15.4 位字段
  • 15.4.1 位字段示例
  • 15.4.2 位字段和按位运算符
  • 15.5 对齐特性(C11)
  • 15.6 关键概念
  • 15.7 本章小结
  • 15.8 复习题
  • 15.9 编程练习
  • 第16章 C预处理器和C库
  • 16.1 翻译程序的第一步
  • 16.2 明示常量:#define
  • 16.2.1 记号
  • 16.2.2 重定义常量
  • 16.3 在#define中使用参数
  • 16.3.1 用宏参数创建字符串:#运算符
  • 16.3.2 预处理器黏合剂:##运算符
  • 16.3.3 变参宏:...和_ _VA_ARGS_ _
  • 16.4 宏和函数的选择
  • 16.5 文件包含:#include
  • 16.5.1 头文件示例
  • 16.5.2 使用头文件
  • 16.6 其他指令
  • 16.6.1 #undef指令
  • 16.6.2 从C预处理器角度看已定义
  • 16.6.3 条件编译
  • 16.6.4 预定义宏
  • 16.6.5 #line和#error
  • 16.6.6 #pragma
  • 16.6.7 泛型选择(C11)
  • 16.7 内联函数(C99)
  • 16.8 _Noreturn函数(C11)
  • 16.9 C库
  • 16.9.1 访问C库
  • 16.9.2 使用库描述
  • 16.10 数学库
  • 16.10.1 三角问题
  • 16.10.2 类型变体
  • 16.10.3 tgmath.h库(C99)
  • 16.11 通用工具库
  • 16.11.1 exit()和atexit()函数
  • 16.11.2 qsort()函数
  • 16.12 断言库
  • 16.12.1 assert的用法
  • 16.12.2 _Static_assert(C11)
  • 16.13 string.h库中的memcpy()和memmove()
  • 16.14 可变参数:stdarg.h
  • 16.15 关键概念
  • 16.16 本章小结
  • 16.17 复习题
  • 16.18 编程练习
  • 第17章 高级数据表示
  • 17.1 研究数据表示
  • 17.2 从数组到链表
  • 17.2.1 使用链表
  • 17.2.2 反思
  • 17.3 抽象数据类型(ADT)
  • 17.3.1 建立抽象
  • 17.3.2 建立接口
  • 17.3.3 使用接口
  • 17.3.4 实现接口
  • 17.4 队列ADT
  • 17.4.1 定义队列抽象数据类型
  • 17.4.2 定义一个接口
  • 17.4.3 实现接口数据表示
  • 17.4.4 测试队列
  • 17.5 用队列进行模拟
  • 17.6 链表和数组
  • 17.7 二叉查找树
  • 17.7.1 二叉树ADT
  • 17.7.2 二叉查找树接口
  • 17.7.3 二叉树的实现
  • 17.7.4 使用二叉树
  • 17.7.5 树的思想
  • 17.8 其他说明
  • 17.9 关键概念
  • 17.10 本章小结
  • 17.11 复习题
  • 17.12 编程练习
  • 附录A 复习题答案
  • A.1 第1章复习题答案
  • A.2 第2章复习题答案
  • A.3 第3章复习题答案
  • A.4 第4章复习题答案
  • A.5 第5章复习题答案
  • A.6 第6章复习题答案
  • A.7 第7章复习题答案
  • A.8 第8章复习题答案
  • A.9 第9章复习题答案
  • A.10 第10章复习题答案
  • A.11 第11章复习题答案
  • A.12 第12章复习题答案
  • A.13 第13章复习题答案
  • A.14 第14章复习题答案
  • A.15 第15章复习题答案
  • A.16 第16章复习题答案
  • A.17 第17章复习题答案
  • 附录B 参考资料
  • B.1 参考资料I:补充阅读
  • B.1.1 在线资源
  • B.1.2 C语言书籍
  • B.1.3 编程书籍
  • B.1.4 参考书籍
  • B.1.5 C++书籍
  • B.2 参考资料II:C运算符
  • B.2.1 算术运算符
  • B.2.2 关系运算符
  • B.2.3 赋值运算符
  • B.2.4 逻辑运算符
  • B.2.5 条件运算符
  • B.2.6 与指针有关的运算符
  • B.2.7 符号运算符
  • B.2.8 结构和联合运算符
  • B.2.9 按位运算符
  • B.2.10 混合运算符
  • B.3 参考资料III:基本类型和存储类别
  • B.3.1 总结:基本数据类型
  • B.3.2 总结:如何声明一个简单变量
  • B.3.3 总结:限定符
  • B.4 参考资料IV:表达式、语句和程序流
  • B.4.1 总结:表达式和语句
  • B.4.2 总结:while语句
  • B.4.3 总结:for语句
  • B.4.4 总结:do while语句
  • B.4.5 总结:if语句
  • B.4.6 带多重选择的switch语句
  • B.4.7 总结:程序跳转
  • B.5 参考资料V:新增C99和C11的ANSI C库
  • B.5.1 断言:assert.h
  • B.5.2 复数:complex.h(C99)
  • B.5.3 字符处理:ctype.h
  • B.5.4 错误报告:errno.h
  • B.5.5 浮点环境:fenv.h(C99)
  • B.5.6 浮点特性:float.h
  • B.5.7 整数类型的格式转换:inttypes.h
  • B.5.8 可选拼写:iso646.h
  • B.5.9 本地化:locale.h
  • B.5.10 数学库:math.h
  • B.5.11 非本地跳转:setjmp.h
  • B.5.12 信号处理:signal.h
  • B.5.13 对齐:stdalign.h(C11)
  • B.5.14 可变参数:stdarg.h
  • B.5.15 原子支持:stdatomic.h(C11)
  • B.5.16 布尔支持:stdbool.h(C99)
  • B.5.17 通用定义:stddef.h
  • B.5.18 整数类型:stdint.h
  • B.5.19 标准I/O库:stdio.h
  • B.5.20 通用工具:stdlib.h
  • B.5.21 _Noreturn:stdnoreturn.h
  • B.5.22 处理字符串:string.h
  • B.5.23 通用类型数学:tgmath.h(C99)
  • B.5.24 线程:threads.h(C11)
  • B.5.25 日期和时间:time.h
  • B.5.26 统一码工具:uchar.h(C11)
  • B.5.27 扩展的多字节字符和宽字符工具:wchar.h(C99)
  • B.5.28 宽字符分类和映射工具:wctype.h(C99)
  • B.6 参考资料VI:扩展的整数类型
  • B.6.1 精确宽度类型
  • B.6.2 最小宽度类型
  • B.6.3 最快最小宽度类型
  • B.6.4 最大宽度类型
  • B.6.5 可存储指针值的整型
  • B.6.6 扩展的整型常量
  • B.7 参考资料VII:扩展字符支持
  • B.7.1 三字符序列
  • B.7.2 双字符
  • B.7.3 可选拼写:iso646.h
  • B.7.4 多字节字符
  • B.7.5 通用字符名(UCN)
  • B.7.6 宽字符
  • B.7.7 宽字符和多字节字符
  • B.8 参考资料VIII:C99/C11数值计算增强
  • B.8.1 IEC浮点标准
  • B.8.2 fenv.h头文件
  • B.8.3 STDC FP_CONTRACT编译指示
  • B.8.4 math.h库增补
  • B.8.5 对复数的支持
  • B.9 参考资料IX:C和C++的区别
  • B.9.1 函数原型
  • B.9.2 char常量
  • B.9.3 const限定符
  • B.9.4 结构和联合
  • B.9.5 枚举
  • B.9.6 指向void的指针
  • B.9.7 布尔类型
  • B.9.8 可选拼写
  • B.9.9 宽字符支持
  • B.9.10 复数类型
  • B.9.11 内联函数
  • B.9.12 C++11中没有的C99/C11特性
展开全部

评分及书评

4.8
5个评分
  • 用户头像
    给这本书评了
    5.0
    我的C语言入门第一书

    这本书真的很不错,但缺点就是有点点啰嗦,讲的非常基础和细致,每个知识点都反复反复唠叨。可以把这本书当做参考书来查阅,如果从头翻到尾这样一路看下来,会显得有点啰嗦。我在自学的过程中,这本书可以说是反复反复看了多次。这本书读得差不多了,可以再看以下几本:《C 和指针》,《C 专家编程》,《C 陷阱与缺陷》,《C 程序设计语言》,每一本书都多看几遍,基础夯实,再去学习数据结构。这是我的自学之路。

      转发
      3
      用户头像
      给这本书评了
      5.0

      指针减去一个整数:可以使用 - 运算符从一个指针中减去一个整数。指针必须是第 1 个运算对象,整数是第 2 个运算对象。该整数将乘以指针指向类型的大小(以字节为单位),然后用初始地址减去乘积。所以 ptr3 - 2 与 & urn [2] 等价,因为 ptr3 指向的是 & urn [4]。如果相减的结果超出了初始指针所指向数组的范围,计算结果则是未定义的。除非正好超过数组末尾第一个位置,C 保证该指针有效。

        转发
        评论

      出版方

      人民邮电出版社

      人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。