C入门经典第4版课件ch07章节

上传人:E**** 文档编号:91225898 上传时间:2019-06-26 格式:PPT 页数:26 大小:390KB
返回 下载 相关 举报
C入门经典第4版课件ch07章节_第1页
第1页 / 共26页
C入门经典第4版课件ch07章节_第2页
第2页 / 共26页
C入门经典第4版课件ch07章节_第3页
第3页 / 共26页
C入门经典第4版课件ch07章节_第4页
第4页 / 共26页
C入门经典第4版课件ch07章节_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《C入门经典第4版课件ch07章节》由会员分享,可在线阅读,更多相关《C入门经典第4版课件ch07章节(26页珍藏版)》请在金锄头文库上搜索。

1、第07章 指针,上一章已提到过指针,还给出使用指针的提示。本章深入探索这个主题,了解指针的功用。 本章将介绍许多新概念,所以可能需要多次重复某些内容。本章很长,需要花一些时间学习其内容,用一些例子体验指针。指针的基本概念很简单,但是可以应用它们解决复杂的问题。指针是用C语言高效编程的一个基本元素 。,7.1 计算机绘图相关知识,指针是C语言里最强大的工具之一,它也是最容易令人困惑的主题,所以一定要在开始时正确理解其概念,在深入探讨指针时,要对其操作有清楚的认识 。 声明指针 通过指针访问值 使用指针 指向常量的指针 常量指针 指针的命名,7.1.1 声明指针,以下语句可以声明一个指向int类型

2、变量的指针: int *pointer; pointer变量的类型是int *,它可以存储任意int类型变量的地址。这条语句创建了pointer,但没有初始化它。未初始化的指针是非常危险的,所以应总是在声明指针时对它进行初始化。,7.1.2 通过指针访问值,使用间接运算符*可以访问指针所指的变量值。这个运算符也称为取消引用运算符(dereferencing operator),因为它用于取消对指针的引用 。,7.1.3 使用指针,可以通过指针pointer访问number的内容,所以可以在算术语句中使用取消引用的指针,例如: *pointer += 25; 上述语句将变量pointer所指向的

3、地址中的值增加25。星号*表示访问pointer变量所指向的内容。这里它是变量number的内容。,7.1.4 指向常量的指针,声明指针时,可以使用const关键字指定,该指针指向的值不能改变。下面是声明const指针的例子: long value = 9999L; const long *pvalue = /* Defines a pointer to a constant */ 把pvalue指向的值声明为const,所以编译器会检查是否有语句试图修改pvalue指向的值,并将这些语句标记为错误 。,7.1.5 常量指针,当然,也可以使指针中存储的地址不能改变。此时,在指针声明中使用con

4、st关键字的方式略有区别。下面的语句可以使指针总是指向相同的对象: int count = 43; int *const pcount = /* Defines a constant */,7.1.6 指针的命名,我们已经开始编写相当大的程序了。程序越来越大,就越难记住哪个是一般变量,哪个是指针。因此,最好将p作为指针名的第一个字母。如果严格遵循这个命名方法,肯定很清楚哪个变量是指针 。,7.2 数组和指针,下面复习一下什么是数组,什么是指针: 数组是相同类型的对象集合,可以用一个名称引用。例如,数组scores50可以含有50场篮球季赛的比分。使用不同的索引值可以引用数组中的每个元素。sco

5、res0是第一个分数,scores49是最后一个分数。如果每个月有10场比赛,就可以使用多维数组scores1210。如果一月开始比赛,则五月的第3场比赛用scores52引用。 指针是一个变量,它的值是给定类型的另一个变量或常量的地址。使用指针可以在不同的时间访问不同的变量,只要它们的类型相同即可 。,7.3 多维数组,前面讨论的都是一维数组,它和二维或多维数组是否相同?它们在某种程度上是相同的。然而,指针和数组名称之间的差异变得更为明显。考虑第5章末尾在井字程序中使用的数组 。 多维数组和指针 访问数组元素,7.3.1 多维数组和指针,前面通过指针的表示法用数组名称引用二维数组,现在学习使

6、用声明为指针的变量。如前所述,这有非常大的区别。如果声明一个指针,给它指定数组的地址,就可以用该指针访问数组的成员 。,7.3.2 访问数组元素,可以使用几种方法访问二维数组的元素。表7-1列出了访问board数组的方法。最左列包含board数组的行索引值,最上面的一行包含列索引值。表中对应于给定行索引和列索引的项列出了引用该元素的各种表达式 。,7.4 内存的使用,指针是一个非常灵活且强大的编程工具,有非常广泛的应用。大多数C程序都在某种程度上使用了指针。C语言还进一步增强了指针的功能,为在代码中使用指针提供了很强的激励机制,它允许在执行程序时动态分配内存。只有使用指针,才能动态分配内存 。

7、 动态内存分配:malloc()函数 分配内存时使用sizeof运算符 用calloc()函数分配内存 释放动态分配的内存 重新分配内存,7.4.1 动态内存分配:malloc()函数,在运行时分配内存的最简单的标准库函数是malloc()。使用这个函数时,需要在程序中包含头文件。使用malloc()函数需指定要分配的内存字节数作为参数。这个函数返回所分配内存的第一个字节的地址。因为返回的是一个地址,所以这里可以使用指针。,7.4.2 分配内存时使用sizeof运算符,前一个例子很不错,但我们不常处理字节,而常常处理int、double等数据类型。例如给75个int类型的数据项分配内存,可以使

8、用以下的语句: pNumber = (int *) malloc(75*sizeof(int);,7.4.3 用calloc()函数分配内存,在头文件中声明的calloc()函数与malloc()函数相比有两个优点。第一,它把内存分配为给定大小的数组,第二,它初始化了所分配的内存,所有的位都是0。calloc()函数需要两个参数:数组的元素个数和数组元素占用的字节数,这两个参数的类型都是size_t。该函数也不知道数组元素的类型,所以所分配区域的地址返回为void *类型 。,7.4.4 释放动态分配的内存,在动态分配内存时,应总是在不需要该内存时释放它们。堆上分配的内存会在程序结束时自动释放

9、,但最好在使用完这些内存后立即释放,甚至是在退出程序之前,也应立即释放。在比较复杂的情况下,很容易出现内存泄漏。当动态分配了一些内存时,没有保留对它们的引用,就会出现内存泄漏,此时无法释放内存。这常常发生在循环内部,由于没有释放不再需要的内存,程序会使用越来越多的内存,最终占用所有内存 。,7.4.5 重新分配内存,realloc()函数可以重用前面通过malloc()或calloc() (或realloc()分配的内存。函数需要两个参数:一个是指针,它包含前面调用malloc()、calloc()或realloc()返回的地址,另一个是要分配的新内存的字节数。,7.5 使用指针处理字符串,前

10、面使用char类型的数组变量存储字符串,也可以使用char类型的指针变量引用字符串。这个方法在处理字符串时非常灵活。下面的语句声明了一个char类型的指针变量: char *pString = NULL; 更多的控制字符串输入 使用指针数组,7.5.1 更多的控制字符串输入,在读取文本时,常需要比scanf()函数更多的控制。在中声明的getchar()函数提供了非常基本的操作,一次只读取一个字符,但是它可控制何时停止读入字符。这样,就可以确保不会超过为存储输入而分配的内存。,7.5.2 使用指针数组,当然,处理多个字符串时,可以在堆上使用指针数组存储对字符串的引用。假定从键盘上读取3个字符串

11、,将它们存储在buffer数组中。可以创建一个指针数组,存储这3个字符串的位置: char *pS3 = NULL ;,7.6 设计程序,前面介绍了C语言中一个比较难的部分,现在运用学过的内容编写一个应用程序。本节将依循惯例,先分析、设计,然后一步步编写代码。这是本章最后一个程序。 问题 分析 解决方案,7.6.1 问题,要处理的问题是用一些新的特性重写第3章的计算器程序,但这次要使用指针。主要改进如下: 允许使用有符号的小数,包含带或+符号的小数和有符号的整数。 允许表达式组合多个运算式,如2.5+3.76/6。 添加运算符,计算幂,因此23会得到8。 允许使用前一个运算的结果。如果前一个运

12、算的结果是2.5,那么=*2+7会得到12。任何以赋值运算符开头的输入行都自动假设左操作数是前一个运算的结果。,7.6.2 分析,我们事先并不知道表达式有多长或有多少个操作数。用户会输入一个完整的字符串,然后分析它,确定它包含什么数值和运算符。只要一个运算符有左右操作数,就计算其中间结果 。,7.6.3 解决方案,如本章前面所述,scanf()函数不允许读入含有空格的完整字符串,而是在第一个空白字符处停止读取。因此,这里使用在头文件中声明的gets()函数读取输入的表达式。这个函数会读入整行输入,包含空格 。,7.7 小结,本章涵盖了许多基础知识,详细探讨了指针。读者现在应该了解指针和数组(一维和多维数组)间的关系了,并掌握了它们的用法。本章介绍了动态分配内存的函数malloc()、calloc()和realloc(),它们给程序提供了足够的内存,以执行数据处理。函数free()用来释放先前由malloc()、calloc()和realloc()分配的内存。读者应该很清楚如何给字符串使用指针,以及如何使用指针数组。 本章讨论的主题是本书以后许多章节的基础,对编写C程序是很有帮助的,所以在进入下一章之前,一定要熟练掌握这些内容。下一章将介绍程序的结构。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号