实用c语言程序设计教程6便捷工具指针ppt

上传人:tia****nde 文档编号:70591571 上传时间:2019-01-17 格式:PPT 页数:171 大小:1.01MB
返回 下载 相关 举报
实用c语言程序设计教程6便捷工具指针ppt_第1页
第1页 / 共171页
实用c语言程序设计教程6便捷工具指针ppt_第2页
第2页 / 共171页
实用c语言程序设计教程6便捷工具指针ppt_第3页
第3页 / 共171页
实用c语言程序设计教程6便捷工具指针ppt_第4页
第4页 / 共171页
实用c语言程序设计教程6便捷工具指针ppt_第5页
第5页 / 共171页
点击查看更多>>
资源描述

《实用c语言程序设计教程6便捷工具指针ppt》由会员分享,可在线阅读,更多相关《实用c语言程序设计教程6便捷工具指针ppt(171页珍藏版)》请在金锄头文库上搜索。

1、第6章 便捷工具指针,C语言程序设计Programming in C,C语言程序设计 - 第6章 指针,思考与实用的结合,就能产生明确的概念,就能找到一些简便方法,这些方法的发现激励着自尊心,而方法的准确性又能使智力得到满足,原来枯燥无味的工作,有了简便方法,就令人感到兴趣了。,C语言程序设计 - 第6章 指针,1、理解变量指针和地址 2、理解数组指针的概念、定义和运算 3、应用指针运算符&和*等 4、通过指针访问数组元素、字符数组 5、理解指针和数组间的关系 6、理解并应用函数引用中的指针 7、理解二级指针与指针数组 8、理解动态内存分配,本章教学目标,C语言程序设计 - 第6章 指针,教学

2、重点和难点,重点 指针与数组 指针数组 难点 指针数组 通过指针访问数组元素,C语言程序设计 - 第6章 指针,本章内容,6.1 指针的基本操作与运算 6.2 利用指针访问数组 6.3 指针数组 6.4 指针与函数 6.5 动态内存分配,C语言程序设计 - 第6章 指针,1、以更简洁的方式引用大的数据结构(data structure)。 数据元素相互之间的关系称为结构(structure)。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构一般包括三个方面:数据的逻辑结构、数据的存储结构以及对数据的基本操作。 程序中的数据无论如何增长,总是位于计算机的内存中,因此,必然会有

3、地址。指针可以把地址作为一个完整数据值的速记符号。,C语言中指针的重要用途:,C语言程序设计 - 第6章 指针,2、指针使程序的不同部分(或函数)能共享数据。 3、利用指针,能在程序执行过程中预留新的内存空间。到现在为止,在程序中能使用的内存是通过显式定义分配给变量的内存。在许多应用中,如果程序能在运行时获得新的内存空间,并让指针指向这一内存则更为方便。 4、指针可用来记录数据项之间的关系。在高级语言程序设计中应用中,指针被广泛用于构造单个数据值之间的联系。比如,程序员通常在第一个数据的内部表示中包含指向下一个数据项的指针,来说明这两个数据之间有概念上的顺序关系。,C语言程序设计 - 第6章

4、指针,本章项目任务,利用指针,编程实现“学生信息管理系统”中学生成绩的管理。,C语言程序设计 - 第6章 指针,6.1 指针的基本操作与运算,6.1.1 指针的基本运算和操作 6.1.2 多级指针概念与地址关系,指针变量就是存放某个地址的变量,指针的值是地址。 程序中通常并不直接指出或使用内存地址,因为地址的使用和系统有关,每次运行程序时内存地址都可能会发生改变。 常用指针来间接寻址内存数据。,C语言程序设计 - 第6章 指针,6.1.1 指针的基本运算和操作,1指针赋值 2指针运算 3文件指针变量的使用,C语言程序设计 - 第6章 指针,1指针赋值,例如:int *p; /*定义一个指向整型

5、数据的指针变量p*/ 在程序中若想使用该指针变量,必须先对其赋值,使其指向某个地址。,C语言程序设计 - 第6章 指针,#include void main( ) unsigned c10=1,2,3,4,5,6,7,8,9,0,a=16; unsigned *p= ,【例6-1】阅读并理解程序中变量、地址和指针之间的关系。,C语言程序设计 - 第6章 指针,C语言程序设计 - 第6章 指针,注意:,使用没有初始化的指针会产生不可预料后果。可用“空”值初始化避免这种现象。,将0赋给指针变量,不能理解为将0地址赋给指针变量,说明该指针变量目前不指向任何变量或地址。,C语言程序设计 - 第6章 指

6、针,(1)& :取内存地址,单目运算符 (2)*:间接访问内存,单目运算符 (3)+/-:加法/减法运算符,双目运算符 (4)+/-:增1/减1运算符,单目运算符 (5)关系运算符:,=,=,=,!=,2指针运算(Pointer Arithmetic),指针值的集合是地址空间编码。 在这个集合上可进行操作运算,所用的指针运算符有:,C语言程序设计 - 第6章 指针,指针移动运算 通过对指针变量进行加、减运算实现对指针变量的重新定值,使指针指向不同的存储单元。指针移动运算的限制条件为: 指针只能在相同数据类型的连续空间内移动; 指针移动的内存单位是基数据类型的逻辑单位,而不是字节单位。,主要运算

7、形式有: 指针变量+/-整型表达式 整型表达式+指针变量 +/-指针变量或指针变量+/- 指针变量1-指针变量2,C语言程序设计 - 第6章 指针,例:假设指针变量p、q是同类型指针,且指向同一数据集合(数组),n是整型常量或变量,则指针变量p、q支持如下五种算术运算: 后置自加运算:p+; /*p作为当前操作数,然后后移一个元素*/ 后置自减运算:p-; /*p作为当前操作数,然后前移一个元素*/ 前置自加运算:+p; /*p后移一个元素,然后作为当前操作数*/ 前置自减运算:-p; /*p前移一个元素,然后作为当前操作数 */ 加整型量:p+n; /*取得p之后第n个元素的地址*/ 减整型

8、量:p-n; /*取得p之前第n个元素的地址*/ 同类指针相减:p-q; /*表示p和q两者之间的元素个数*/,C语言程序设计 - 第6章 指针,C语言程序设计 - 第6章 指针,【例6-2】阅读程序。注意指针变量的移动。,#include void main( ) int a10=54,65,8,2,3,56,8,21,57,98,*p, i; p=a; for(i=0;i10;i+) printf(“%4d“, *p+ ); printf(“n“); ,C语言程序设计 - 第6章 指针,如果p指向a数组中第i个元素,则: *p-相当于*(p-)或 ai-,先对p进行“*”运算,再使p自减。

9、 *-p相当于*(-p) 或a-i,先对p自减,再作*运算。 *+p相当于*(+p)或 a+i,先对p自加,再作*运算。 *p+相当于*(p+)或 ai+,先对p进行“*”运算,再使p自加。 (*p)-,先取*p的值,再将此值自减。 -(*p),先将*p的值自减,再取*p的值。 (*p)+,先取*p的值,再将此值自加。 +(*p),先将*p的值自加,再取*p的值。,C语言程序设计 - 第6章 指针,关系运算 只有当两个指针变量指向同一个连续的存储空间时,才能进行关系运算。 判断两个指针是否指向同一个存储单元: p=q; /*当p和q指向同一元素时,表达式的值为1;反之为0*/ p!=q; /*

10、当p和q不指向同一元素时,表达式的值为1;反之为0*/,C语言程序设计 - 第6章 指针,判断不同指针所指向的存储单元间的位置关系: pq /*当p所指的元素在q所指的元素之后时,表达式的值 为1;反之为0。*/,C语言程序设计 - 第6章 指针,【例6-3】利用指针的移动和比较运算,求数组 int a10的10个元素之和。,算法思想: 设置指针p和q分别指向数组的首和尾;通过首指针向后或尾指针向前移动,直到首、尾指针相等,即遍历了整个数组,从而实现对数组的操作。,C语言程序设计 - 第6章 指针,#include void main() int s=0, a10, *p, *q; for(

11、p=a+9, q=a; p=q; p- ) scanf(“%d“,p); q=a+9; p=a; while( p=q ) s+=*p; +p; printf(“sum=%dn“,s); ,C语言程序设计 - 第6章 指针,【例6-4】利用指针移动和比较运算,编写程序将一个字符串逆置。要求在同一个数组中实现字符串逆置。,算法思想: 设置s和p两个指针分别指向串首和串尾(不是数组的首和尾),交换它们对应的字符; 然后s和p分别向字符串中间移动,并同时交换对应位置的字符; 直到s与p指向相同位置或s指向p后的位置。,#include #include void main( ) char str50

12、,*p,*s,c; printf(“Enter string:“); gets(str); p=s=str; /*指针p和s同时指向str */ while(*p) p+; /*找到串结束标记0 */ p-; /*指针回退一个字符,指向字符串中的最后一个字符*/ /*以上语句使s和p分别指向串首和串尾*/ while(sp) /*指针比较,s在p之前时,进行循环交换*/ c=*s; /*交换两个指针所指向的字符 */ *s+=*p; /*串前面的指针s向后(+1)移动*/ *p-= c; /*串后面的指针p向前(-1)移动*/ puts(str); ,C语言程序设计 - 第6章 指针,3文件指

13、针变量的使用(选讲),使用文件指针来访问数据文件。 指向文件的指针使用FILE来进行声明定义。,例: FILE *sensor; sensor=fopen(“sensor1.txt”,“r”); /*文件指针变量赋值*/ fscanf(sensor,“%f %f”, /*使用该文件指针*/,C语言程序设计 - 第6章 指针,【例6-5】阅读并理解程序中的文件指针,深入学 习相应的文件读写函数等。,#include #include void main( ) FILE *fp; /*建立文件指针fp*/ int i, k, n; if ( (fp=fopen(“data.txt“,“w+“) =

14、NULL) printf(“Open errorn“); exit(0); for (i=1;i6;i+) fprintf(fp, “%d n“,i); rewind(fp); /*将文件指针位置移至文件首*/ fscanf(fp, “%d %d“, /*关闭文件指针指向的数据文件*/ ,C语言程序设计 - 第6章 指针,文件的顺序读写: 文件打开时,文件指针指向文件的首位置; 文件的读写是在文件指针的当前位置进行的; 每完成一次读写操作,文件指针自动下移一个位置; 这就是文件的顺序读写。fscanf、fprintf等是顺序文件读写函数。 文件的随机读写: 文件还可以进行随机读写,即指定任意一

15、个文件指针位置,然后进行读写,不一定按照文件的顺序进行。 使用改变文件指针当前位置的函数,实现文件的随机读写。,C语言程序设计 - 第6章 指针,原型: rewind(fp); 功能:无论文件指针当前在何处,将文件指针的当前位置置于文件的开始处。其中,fp为文件指针。,rewind函数指向文件首记录,ftell函数获取文件指针的当前位置,原型: long ftell(fp) 功能:获取文件指针的当前位置。 说明:fp为文件指针。ftell函数返回值为长整型数据,调用成功返回文件的当前位置即相对于文件开始的字节数;调用失败,返回-1L。 例, long n; n=ftell(fp);,文件指针定

16、位函数,C语言程序设计 - 第6章 指针,fseek函数指向指定位置,一般形式为: fseek(fp,位置修正值,当前位置设定点); 功能:根据文件指针的当前位置设定点和位置修正值,将文件指针在当前位置设定点的基础上,按位置修正值进行调整。 说明: fp为文件指针; 位置修正值是位移量,是long型数据,表示以当前位置设定点为起始点移动的相对值; 当前位置设定点是int型数据,表示移动的起始位置; 位置修正值和当前位置设定点都是以字节为单位。,C语言程序设计 - 第6章 指针,例如: fseek(fp,100L,0); 把位置指针移到离文件首100个字节处。 fseek(fp,0,SEEK_SET); 将文件指针从文件头开始向后调整0个字节,即文件的开始fsee

展开阅读全文
相关资源
相关搜索

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

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