小苏子
小苏子PDF在线图书

C和指针 POINTERS ON C 内容简介

C和指针 POINTERS ON C 内容简介

C和指针 POINTERS ON C 目录

C和指针 POINTERS ON C 精彩文摘

《C和指针 POINTERS ON C》提供与C语言编程相关的全面资源和深入讨论。本书通过对指针的基础知识和高级特性的探讨,帮助程序员把指针的强大功能融入到自己的程序中去。全书共18章,覆盖了数据、语句、操作符和表达式、指针、函数、数组、字符串、结构和联合等几乎所有重要的C编程话题。书中给出了很多编程技巧和提示,每章后面有针对性很强的练习,附录部分则给出了部分练习的解答。本书适合C语言初学者和初级c程序员阅读,也可作为计算机专业学生学习c语言的参考。第1章 快速上手1.1 简介1.1.1 空白和注释1.1.2 预处理指令1.1.3 main函数1.1.4 read_column_numbers函数1.1.5 rearrange函数1.2 补充说明1.3 编译1.4 总结1.5 警告的总结1.6 编程提示的总结1.7 问题1.8 编程练习第2章 基本概念2.1 环境2.1.1 翻译2.1.2 执行2.2 词法规则2.2.1 字符2.2.2 注释2.2.3 自由形式的源代码2.2.4 标识符2.2.5 程序的形式2.3 程序风格2.4 总结2.5 警告的总结2.6 编程提示的总结2.7 问题2.8 编程练习第3章 数据3.1 基本数据类型3.1.1 整型家族3.1.2 浮点类型3.1.3 指针3.2 基本声明3.2.1 初始化3.2.2 声明简单数组3.2.3 声明指针3.2.4 隐式声明3.3 typedef3.4 常量3.5 作用域3.5.1 代码块作用域3.5.2 文件作用域3.5.3 原型作用域3.5.4 函数作用域3.6 链接属性3.7 存储类型3.8 static关键字3.9 作用域、存储类型示例3.10 总结3.11 警告的总结3.12 编程提示的总结3.13 问题第4章 语句4.1 空语句4.2 表达式语句4.3 代码块4.4 if语句4.5 while语句4.5.1 break和continue语句4.5.2 while语句的执行过程4.6 for语句4.7 do语句4.8 switch语句4.8.1 switch中的break语句4.8.2 default子句4.8.3 switch语句的执行过程4.9 goto语句4.10 总结4.11 警告的总结4.12 编程提示的总结4.13 问题4.14 编程练习第5章 操作符和表达式5.1 操作符5.1.1 算术操作符5.1.2 移位操作符5.1.3 位操作符5.1.4 赋值5.1.5 单目操作符5.1.6 关系操作符5.1.7 逻辑操作符5.1.8 条件操作符5.1.9 逗号操作符5.1.10 下标引用、函数调用和结构成员5.2 布尔值5.3 左值和右值5.4 表达式求值5.4.1 隐式类型转换5.4.2 算术转换5.4.3 操作符的属性5.4.4 优先级和求值的顺序5.5 总结5.6 警告的总结5.7 编程提示的总结5.8 问题5.9 编程练习第6章 指针6.1 内存和地址6.2 值和类型6.3 指针变量的内容6.4 间接访问操作符6.5 未初始化和非法的指针6.6 NULL指针6.7 指针、间接访问和左值6.8 指针、间接访问和变量6.9 指针常量6.10 指针的指针6.11 指针表达式6.12 实例6.13 指针运算6.13.1 算术运算6.13.2 关系运算6.14 总结6.15 警告的总结6.16 编程提示的总结6.17 问题6.18 编程练习第7章 函数7.1 函数定义7.2 函数声明7.2.1 原型7.2.2 函数的缺省认定7.3 函数的参数7.4 ADT和黑盒7.5 递归7.5.1 追踪递归函数7.5.2 递归与迭代7.6 可变参数列表7.6.1 stdarg宏7.6.2 可变参数的限制7.7 总结7.8 警告的总结7.9 编程提示的总结7.10 问题7.11 编程练习第8章 数组8.1 一维数组8.1.1 数组名8.1.2 下标引用8.1.3 指针与下标8.1.4 指针的效率8.1.5 数组和指针8.1.6 作为函数参数的数组名8.1.7 声明数组参数8.1.8 初始化8.1.9 不完整的初始化8.1.10 自动计算数组长度8.1.11 字符数组的初始化8.2 多维数组8.2.1 存储顺序8.2.2 数组名8.2.3 下标8.2.4 指向数组的指针8.2.5 作为函数参数的多维数组8.2.6 初始化8.2.7 数组长度自动计算8.3 指针数组8.4 总结8.5 警告的总结8.6 编程提示的总结8.7 问题8.8 编程练习第9章 字符串、字符和字节9.1 字符串基础9.2 字符串长度9.3 不受限制的字符串函数9.3.1 复制字符串9.3.2 连接字符串9.3.3 函数的返回值9.3.4 字符串比较9.4 长度受限的字符串函数9.5 字符串查找基础9.5.1 查找一个字符9.5.2 查找任何几个字符9.5.3 查找一个子串9.6 高级字符串查找9.6.1 查找一个字符串前缀9.6.2 查找标记9.7 错误信息9.8 字符操作9.8.1 字符分类9.8.2 字符转换9.9 内存操作9.10 总结9.11 警告的总结9.12 编程提示的总结9.13 问题9.14 编程练习第10章 结构和联合10.1 结构基础知识10.1.1 结构声明10.1.2 结构成员10.1.3 结构成员的直接访问10.1.4 结构成员的间接访问10.1.5 结构的自引用10.1.6 不完整的声明10.1.7 结构的初始化10.2 结构、指针和成员10.2.1 访问指针10.2.2 访问结构10.2.3 访问结构成员10.2.4 访问嵌套的结构10.2.5 访问指针成员10.3 结构的存储分配10.4 作为函数参数的结构10.5 位段10.6 联合10.6.1 变体记录10.6.2 联合的初始化10.7 总结10.8 警告的总结10.9 编程提示的总结10.10 问题10.11 编程练习第11章 动态内存分配11.1 为什么使用动态内存分配11.2 malloc和free11.3 calloc和realloc11.4 使用动态分配的内存11.5 常见的动态内存错误11.6 内存分配实例11.7 总结11.8 警告的总结11.9 编程提示的总结11.10 问题11.11 编程练习第12章 使用结构和指针12.1 链表12.2 单链表12.2.1 在单链表中插入12.2.2 其他链表操作12.3 双链表12.3.1 在双链表中插入12.3.2 其他链表操作12.4 总结12.5 警告的总结12.6 编程提示的总结12.7 问题12.8 编程练习第13章 高级指针话题13.1 进一步探讨指向指针的指针13.2 高级声明13.3 函数指针13.3.1 回调函数13.3.2 转移表13.4 命令行参数13.4.1 传递命令行参数13.4.2 处理命令行参数13.5 字符串常量13.6 总结13.7 警告的总结13.8 编程提示的总结13.9 问题13.10 编程练习第14章 预处理器14.1 预定义符号14.2 #define14.2.1 宏14.2.2 #define替换14.2.3 宏与函数14.2.4 带副作用的宏参数14.2.5 命名约定14.2.6 #undef14.2.7 命令行定义14.3 条件编译14.3.1 是否被定义14.3.2 嵌套指令14.4 文件包含14.4.1 函数库文件包含14.4.2 本地文件包含14.4.3 嵌套文件包含14.5 其他指令14.6 总结14.7 警告的总结14.8 编程提示的总结14.9 问题14.10 编程练习第15章 输入/输出函数15.1 错误报告15.2 终止执行15.3 标准I/O函数库15.4 ANSI I/O概念15.4.1 流15.4.2 文件15.4.3 标准I/O常量15.5 流I/O总览15.6 打开流15.7 关闭流15.8 字符I/O15.8.1 字符I/O宏15.8.2 撤销字符I/O15.9 未格式化的行I/O15.10 格式化的行I/O15.10.1 scanf家族15.10.2 scanf格式代码15.10.3 printf家族15.10.4 printf格式代码15.11 二进制I/O15.12 刷新和定位函数15.13 改变缓冲方式15.14 流错误函数15.15 临时文件15.16 文件操纵函数15.17 总结15.18 警告的总结15.19 编程提示的总结15.20 问题15.21 编程练习第16章 标准函数库16.1 整型函数16.1.1 算术16.1.2 随机数16.1.3 字符串转换16.2 浮点型函数16.2.1 三角函数16.2.2 双曲函数16.2.3 对数和指数函数16.2.4 浮点表示形式16.2.5 幂16.2.6 底数、顶数、绝对值和余数16.2.7 字符串转换16.3 日期和时间函数16.3.1 处理器时间16.3.2 当天时间16.4 非本地跳转16.4.1 实例16.4.2 何时使用非本地跳转16.5 信号16.5.1 信号名16.5.2 处理信号16.5.3 信号处理函数16.6 打印可变参数列表16.7 执行环境16.7.1 终止执行16.7.2 断言16.7.3 环境16.7.4 执行系统命令16.7.5 排序和查找16.8 locale16.8.1 数值和货币格式16.8.2 字符串和locale16.8.3 改变locale的效果16.9 总结16.10 警告的总结16.11 编程提示的总结16.12 问题16.13 编程练习第17章 经典抽象数据类型17.1 内存分配17.2 堆栈17.2.1 堆栈接口17.2.2 实现堆栈17.3 队列17.3.1 队列接口17.3.2 实现队列17.4 树17.4.1 在二叉搜索树中插入17.4.2 从二叉搜索树删除节点17.4.3 在二叉搜索树中查找17.4.4 树的遍历17.4.5 二叉搜索树接口17.4.6 实现二叉搜索树17.5 实现的改进17.5.1 拥有超过一个的堆栈17.5.2 拥有超过一种的类型17.5.3 名字冲突17.5.4 标准函数库的ADT17.6 总结17.7 警告的总结17.8 编程提示的总结17.9 问题17.10 编程练习第18章 运行时环境18.1 判断运行时环境18.1.1 测试程序18.1.2 静态变量和初始化18.1.3 堆栈帧18.1.4 寄存器变量18.1.5 外部标识符的长度18.1.6 判断堆栈帧布局18.1.7 表达式的副作用18.2 C和汇编语言的接口18.3 运行时效率18.4 总结18.5 警告的总结18.6 编程提示的总结18.7 问题18.8 编程练习附录 部分问题答案索引1.1 简介从头开始介绍一门编程语言总是显得很困难,因为有许多细节还没有介绍,很难让读者在头脑中形成一幅完整的图。在本章中,我将向大家展示一个例子程序,并逐行讲解它的工作过程,试图让大家对C语言的整体有一个大概的印象。这个例子程序同时向你展示了你所熟悉的过程在C语言中是如何实现的。这些信息再加上本章所讨论的其他主题,向你介绍了C语言的基础知识,这样你就可以自己编写有用的C程序了。我们所要分析的这个程序从标准输入读取文本并对其进行修改,然后把它写到标准输出。程序1.1首先读取一串列标号。这些列标号成对出现,表示输入行的列范围。这串列标号以一个负值结尾,作为结束标志。剩余的输入行被程序读入并打印,然后输入行中被选中范围的字符串被提取出来并打印。注意,每行第1列的列标号为零。例如,如果输入如下:则程序的输出如下:这个程序的重要之处在于它展示了当你开始编写C程序时所需要知道的绝大多数基本技巧。/*** 这个程序从标准输入中读取输入行并在标准输出中打印这些输入行,** 每个输入行的后面一行是该行内容的一部分。**** 输入的第1行是一串列标号,串的最后以一个负数结尾。** 这些列标号成对出现,说明需要打印的输入行的列的范围。** 例如,0 3 10 12 –1表示第0列到第3列,第10列到第12列的内容将被打印。*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define  MAX_COLS 20       /* 所能处理的最大列号 */#define  MAX_INPUT 1000      /* 每个输入行的最大长度 */int read_column_numbers( int columns[], int max );void rearrange( char *output, char const *input,int n_columns, int const columns[] );int main( void ){int  n_columns;      /* 进行处理的列标号 */int  columns[MAX_COLS];  /* 需要处理的列数 */char input[MAX_INPUT];   /* 容纳输入行的数组 */char output[MAX_INPUT];   /* 容纳输出行的数组 *//*** 读取该串列标号*/n_columns = read_column_numbers( columns, MAX_COLS );/*** 读取、处理和打印剩余的输入行。*/while( gets( input )!= NULL ){printf( “Original input:%s\n”, input );rearrange( output, input, n_columns, columns );printf( “Rearranged line:%s\n”, output );}return EXIT_SUCCESS;}/*** 读取列标号,如果超出规定范围则不予理会。*/int read_column_numbers( int columns[], int max ){int num = 0;int ch;/*** 取得列标号,如果所读取的数小于0则停止。*/while( num < max && scanf( “%d”, &columns[num] ) == 1&& columns[num] >= 0 )num += 1;/*** 确认已经读取的标号为偶数个,因为它们是以对的形式出现的。*/if( num % 2!= 0 ){puts( “Last column number is not paired.” );exit( EXIT_FAILURE );}/*** 丢弃该行中包含最后一个数字的那部分内容。*/while( (ch = getchar())!= EOF && ch!= ‘\n’ );return num;}/*** 处理输入行,将指定列的字符连接在一起,输出行以NUL结尾。*/void rearrange( char *output, char const *input,int n_columns, int const columns[] ){int col;      /* columns数组的下标 */int output_col;  /* 输出列计数器 */int len;      /* 输入行的长度 */len = strlen( input );output_col = 0;/*** 处理每对列标号。*/for( col = 0; col < n_columns; col += 2 ){int nchars = columns[col + 1] – columns[col] + 1;/*** 如果输入行结束或输出行数组已满,就结束任务。

赞(0)
未经允许不得转载:小苏子图书 » C和指针 POINTERS ON C 内容简介