《指针程序设计》PPT课件.ppt

上传人:牧羊曲112 文档编号:5515995 上传时间:2023-07-15 格式:PPT 页数:42 大小:435KB
返回 下载 相关 举报
《指针程序设计》PPT课件.ppt_第1页
第1页 / 共42页
《指针程序设计》PPT课件.ppt_第2页
第2页 / 共42页
《指针程序设计》PPT课件.ppt_第3页
第3页 / 共42页
《指针程序设计》PPT课件.ppt_第4页
第4页 / 共42页
《指针程序设计》PPT课件.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《《指针程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《指针程序设计》PPT课件.ppt(42页珍藏版)》请在三一办公上搜索。

1、语言程序设计(第3版)张磊编著 清华大学出版社,C语言程序设计第7章 指针程序设计,C语言程序设计(第3版)张 磊 编著 21世纪高等学校规划教材 清华大学出版社,语言程序设计(第3版)张磊编著 清华大学出版社,第7章 指针程序设计,7.1 指针概述 7.2 指针变量的定义和使用7.3 指针与数组 7.4 指针作为函数的参数7.5 指针函数和指向函数的指针变量7.6 指针应用举例,语言程序设计(第3版)张磊编著 清华大学出版社,7.1 指针概述,7.1.1 指针变量7.1.2 变量的直接访问和间接访问,语言程序设计(第3版)张磊编著 清华大学出版社,7.1.1 指针变量,指针每一个变量,计算机

2、都指定一段内存用以存储变量值。变量使用的这段内存的开始地址,称为变量的地址。在C语言中,把变量的地址称为指针。简单的说,指针就是变量的地址。指针变量专门用来保存指针的一类变量,通过指针变量就可以实现对其他变量的访问。指针变量可以指向任何一种数据类型,如可以指向基本类型的变量,也可以指向数组等。,语言程序设计(第3版)张磊编著 清华大学出版社,变量的直接访问和间接访问,变量直接访问是指通过变量名直接使用变量数据。例如:int a=10,b=20,c;c=a+b;printf(%dn,c);变量间接访问是指通过指针变量去访问其他变量数据。,语言程序设计(第3版)张磊编著 清华大学出版社,7.2 指

3、针变量的定义和使用,7.2.1 指针变量程序示例 7.2.2 定义指针变量7.2.3 使用指针变量,语言程序设计(第3版)张磊编著 清华大学出版社,7.2.1 指针变量程序示例,例7-1 使用指针变量输出数据程序。/*program e7-1.c*/#includevoid main()int a,b;int*p1,*p2;/*定义指针变量*/a=100;b=10;p1=,语言程序设计(第3版)张磊编著 清华大学出版社,7.2.2 定义指针变量,一般格式 数据类型*指针变量名1,*指针变量名2,;例如:int*p1,*p2;float*q;指针变量允许和其他变量同时定义:char ch,*st

4、r;,注意“数据类型”是指针变量要指向的变量的数据类型。,语言程序设计(第3版)张磊编著 清华大学出版社,7.2.3 使用指针变量,1指针变量的初始化一般格式 数据类型*指针变量名1=地址1,*指针变量名2=地址2,;例如:int m;int*p=&m;,2使用赋值语句赋值一般格式 指针变量=变量地址;例如:int m=196,*p,*q;p=&m;q=p;,语言程序设计(第3版)张磊编著 清华大学出版社,7.2.3 使用指针变量,3使用指针变量输入数据当指针变量有了确切的指向目标后,即可使用该指针变量为指向的目标输入数据。int a,*p;p=其中,*p表示p指向的目标a。,语言程序设计(第

5、3版)张磊编著 清华大学出版社,使用指针变量,例7-2 输入a和b两个整数,然后按先大后小的顺序输出。#includevoid main()int*p1,*p2,*p,a,b;printf(Input:);scanf(%d,%d,语言程序设计(第3版)张磊编著 清华大学出版社,7.3 指针与数组,指针与一维数组 7.3.2 指针与二维数组 7.3.3 指针与字符串 7.3.4 指针数组,语言程序设计(第3版)张磊编著 清华大学出版社,指针与一维数组,主要内容如何把一个指针和一维数组关联起来,即怎样使指针指向一维数组如何使用指针访问一维数组的元素,要解决的问题用指针实现一维数组的数据处理,语言程

6、序设计(第3版)张磊编著 清华大学出版社,7.3.1 指针与一维数组,定义指向一维数组的指针变量 int a5=10,20,30,40,50,*p;p=&a0;,用指针p访问数组元素 当p指向a0后 p与&a0等价,*p与a0等价;p+1与&a1等价,*(p+1)与a1等价;p+i与&ai等价,*(p+i)与ai等价;,也可以直接使用数组名为指针变量赋值:p=a;,也可以使用带下标的指针变量表示数组元素:pi与ai等价,也与*(p+i)等价。,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.1 指针与一维数组,例7-3 用指针实现一维数组的输入输出。,/*program e7-3-1.

7、c*/#include#define N 10void main()int aN;int*p=a,i;for(i=0;iN;i+)scanf(%d,p+i);for(i=0;iN;i+)printf(%d,*(p+i);,/*program e7-3-2.c*/#include#define N 10void main()int aN;int*p=a,i;for(i=0;iN;i+)scanf(%d,p+);p=a;for(i=0;iN;i+)printf(%d,*p+);,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.1 指针与一维数组,例7-4 用指针编写一维数组的排序程序。,#

8、include#define N 10void main()int aN,i,j,temp,*p;printf(Data:);for(p=a;p*(p+1)temp=*p;*p=*(p+1);*(p+1)=temp;printf(nResult:);for(p=a;pa+N;p+)printf(%4d,*p);printf(n);,语言程序设计(第3版)张磊编著 清华大学出版社,指针与二维数组,主要内容如何把一个指针和二维数组关联起来,即怎样使指针指向二维数组如何使用指针访问二维数组的元素,要解决的问题用指针实现二维数组的数据处理,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.2 指

9、针与二维数组,回顾二维数组的存储,int a34;,如何使p指向首元素?aij的指针如何表示?,问题,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.2 指针与二维数组,指针和二维数组元素的对应关系设p是指针变量,若有:p=a0;则p+j将指向a0数组中的元素a0j。由于a0、a1、aM-1等各个行数组依次连续存储,则对于a数组中的任一元素aij,指针的一般形式如下:p+i*N+j元素aij相应的指针表示为:*(p+i*N+j)aij也可用指针下标法表示:pi*N+j,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.2 指针与二维数组,举例int a34=10,20,30,40

10、,50,60,70,80,90,91,92,93;int*p=a0;则数组a的元素a12对应的指针为:p+1*4+2元素a12也就可以表示为:*(p+1*4+2)用下标表示法,a12表示为:p1*4+2,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.2 指针与二维数组,例7-5 求二维数组元素的最大值。/*program e7-5.c*/#includevoid main()int a34=3,17,8,11,66,7,8,19,12,88,7,16;int*p,max;for(p=a0,max=*p;pmax)max=*p;printf(Max=%dn,max);,语言程序设计(第

11、3版)张磊编著 清华大学出版社,7.3.2 指针与二维数组,例7-6 求二维数组元素的最大值,并确定最大值元素所在的行和列。/*program e7-6.c*/#includevoid main()int a34=3,17,8,11,66,7,8,19,12,88,7,16;int*p=a0,max,i,j,row,col;max=a00;row=col=0;for(i=0;imax)max=*(p+i*4+j);row=i;col=j;printf(a%d%d=%dn,row,col,max);,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.3 指针与字符串,使字符型指针指向字符串

12、的方法 通过定义指针变量时初始化指向字符串。char*p=a string;利用赋值语句使指针变量指向字符串。char ch20,*s;char*str1=ch,*str2;s=string;str2=str1;,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.3 指针和字符串,例7-7 用指针复制字符串。/*program e7-7.c*/#includevoid main()char a=I am a student.;char b30,*p1,*p2;int i;for(p1=a,p2=b;*p1!=0;p1+,p2+)*p2=*p1;*p2=0;printf(String b:

13、%sn,b);,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.4 指针数组,数组元素为指针类型的数组称为指针数组,指针数组中的每一个元素都是指针变量。一维指针数组的定义形式如下:数据类型*数组名数组长度;例:char*days7;该语句定义了一个名为days的字符型指针数组,其每一个元素都是指向char变量的指针变量。指针数组的每个元素是指针变量,只能存放地址,所以对指向字符串的指针数组赋初值时,要把存放字符串的首地址赋给指针数组的对应元素。例:char*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;,语

14、言程序设计(第3版)张磊编著 清华大学出版社,7.3.4 指针数组,char*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;,例7-9 分行输出days数组指向的字符串。#includevoid main()int i;char*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;for(i=0;i7;i+)puts(daysi);,语言程序设计(第3版)张磊编著 清华大学出版社,7.4 指针作为函数的参数,7.4.1 简单指针变量作函数参数

15、7.4.2 指向数组的指针作函数的参数7.4.3 字符串指针作函数的参数,语言程序设计(第3版)张磊编著 清华大学出版社,7.4.1 简单指针变量作函数参数,指针变量作形参,void swap(int*p1,int*p2)int temp;temp=*p1;*p1=*p2;*p2=temp;,#includevoid main()void swap(int*,int*);int x,y;scanf(%d,%d,例7-10用swap()函数交换两个变量的值,简单变量指针,简单指针变量作函数参数,实现简单变量的地址在函数中的传递。,语言程序设计(第3版)张磊编著 清华大学出版社,7.4.1 简单指

16、针变量作函数参数,例7-11 用比较交换法,将一维数组的最大值移到数组的最末元素位置,交换过程用上述swap()函数实现。,#includevoid main()void swap(int*,int*);int i,a10=33,-12,97,3,7,18,9,51,10,9;for(i=0;iai+1)swap(,语言程序设计(第3版)张磊编著 清华大学出版社,7.4.2 指向数组的指针作函数的参数,例7-12 求一维数组的最大元素值。用三个函数实现 用输入函数input()建立数组;用max_a()函数求最大值;用main()函数作为主控函数。为了方便函数编写,先假定数组长度为n,指针p指

17、向该数组。那么,input()函数的功能是为p指向的数组输入n个数据;max_a()函数的功能是在具有n个元素、由p指向的数组中找出最大值。,语言程序设计(第3版)张磊编著 清华大学出版社,7.4.2 指向数组的指针作函数的参数,void input(int*p,int n)int i;for(i=0;imax)max=*(p+i);return(max);,/*program e7-12.c*/#include#define N 10void main()void input(int*,int);int max_a(int*,int);int aN;input(a,N);printf(MAX

18、=%dn,max_a(a,N);,例7-12 求一维数组的最大元素值。,语言程序设计(第3版)张磊编著 清华大学出版社,字符串指针作函数的参数,字符串指针作函数的参数,与前面介绍的数组指针作函数参数没有本质的区别,函数间传递的都是地址值,所不同的仅是指针指向对象的类型不同而已。例7-13 用字符串指针作函数参数,将输入的一个字符串复制到另一个字符串中。,语言程序设计(第3版)张磊编著 清华大学出版社,7.4.3 字符串指针作函数的参数,/*program e7-13.c*/#includevoid main()void copy_s(char*,char*);char a20,b30;prin

19、tf(String A:);gets(a);copy_s(a,b);printf(String B:);puts(b);,void copy_s(char*str1,char*str2)while(*str2=*str1)!=0)str1+;str2+;,将a字符串复制到b数组中,例7-13 用字符串指针作函数参数,将输入的一个字符串复制到另一个字符串中。,语言程序设计(第3版)张磊编著 清华大学出版社,7.4.4 指针数组作函数的参数,指针数组的元素是指针变量,用指针数组可以实现对一组字符串的处理。用指针数组作函数参数,就可以实现多字符串处理的通用函数。例7-14 将一组字符串按字典顺序排序

20、后输出。分析(1)使用指针数组days存储各个字符串的开始地址,使days的元素分别指向个字符串,通过指针数组days间接访问各个字符串。,(2)使用字符串比较函数strcmp(),比较两个字符串的大小。,语言程序设计(第3版)张磊编著 清华大学出版社,7.4.4 指针数组作函数的参数,#include#includevoid main()void string_sort(char*,int);void string_out(char*,int);char*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;string

21、_sort(days,7);string_out(days,7);,void string_out(char*string,int n)int i;for(i=0;i0)temp=string j;string j=string j+1;string j+1=temp;,例7-14 将一组字符串按字典顺序排序后输出。,语言程序设计(第3版)张磊编著 清华大学出版社,7.5 指针函数和指向函数的指针变量,7.5.1 指针函数*7.5.2 指向函数的指针变量,语言程序设计(第3版)张磊编著 清华大学出版社,7.5.1 指针函数,函数返回值是指针类型的函数称为指针函数。指针函数的定义的一般格式 数据

22、类型*函数名(形参表)函数体 例7-16 将一组字符串中长度最大的字符串找出来,并输出这个字符串。分析设有n组字符串,由指针数组p_string指向,首先编写求最大长度字符串函数max_lenth(),该函数返回最长字符串的首地址,在主函数中调用它,并输出所求字符串。,/*program e7-16.c*/#include#includevoid main()char*max_lenth(char*,int);char*p_string4=Sydney2000,Beijing2008,Athens1996,Korea1992;char*p;p=max_lenth(p_string,4);put

23、s(p);char*max_lenth(char*string,int n)int i,posion,max_l;posion=0;max_l=strlen(string0);for(i=1;imax_l)max_l=strlen(stringi);posion=i;return(stringposion);,语言程序设计(第3版)张磊编著 清华大学出版社,7.6 指针应用举例,例7-18有红、黄、蓝、白、黑五种颜色的球若干个,每次取出三个球,打印出三种不同颜色球的可能取法。问题分析与算法设计 定义表示颜色的指针数组p,使其元素p0、p1、p2、p3、p4分别指向字符串“red”、“yello

24、w”、“blue”、“white”、“black”,这5个字符串用于表示5种彩球颜色。指针数组p的定义方式如下:char*p5=red,yellow,blue,white,black;使用0、1、2、3、4分别代表红、黄、蓝、白、黑五种颜色,使用穷举法生成各种组合方案,具体由一个三重循环实现。设每次取出的球分别为i、j、k,它们分别是0、1、2、3和4等5种取值。外循环取第1个球,第二重循环取第2个球,第三重循取第3个球。由于3的个球颜色不能相同,所以只有ijk时才为所求,得到一种3色球组合方案。将每一种组合的i、j、k转化为相应的颜色字符串,具体颜色由指针pi、pj、pk指向。,#inclu

25、devoid main()int i,j,k,n=0;char*p5=red,yellow,blue,white,black;for(i=0;i=4;i+)for(j=0;j=4;j+)for(k=0;k=4;k+)if(i!=j),语言程序设计(第3版)张磊编著 清华大学出版社,7.6 指针应用举例,例7-19 利用指针作参数的排序函数实现数组排序。问题分析与算法设计 定义对n个整数实现排序的函数p_sort(),函数原型:void p_sort(int*p,int n)定义对n个整数实现输出的函数p_output(),函数原型:void p_output(int*p,int n)在主函数中

26、定义有N个元素的实参数组a,然后调用p_sort()函数对a数组排序,并调用p_output()函数输出排序结果。,语言程序设计(第3版)张磊编著 清华大学出版社,7.6 指针应用举例,例7-19 利用指针作参数的排序函数实现数组排序。,实现程序/*program e7-19-1.c*/#include#define N 10void p_sort(int*,int);void p_output(int*,int);void main()int aN=3,-5,8,16,7,19,11,6,17,5;p_sort(a,N);p_output(a,N);,void p_sort(int*p,in

27、t n)int i,temp,*q;for(i=1;i*(q+1)temp=*q;*q=*(q+1);*(q+1)=temp;void p_output(int*p,int n)int*q;for(q=p;qp+n;q+)printf(%d,*q);printf(n);,语言程序设计(第3版)张磊编著 清华大学出版社,小 结(1),(1)指针是变量的地址,用于存储指针的变量称为指针变量,通过指针变量可以实现对其他变量的间接访问。(2)使用如下形式定义指针变量:数据类型*指针变量名;其中的“数据类型”是指针变量指向的目标的数据类型,指针变量只能使用变量的地址为其赋值。(3)指针变量使数组的访问更

28、加灵活。若p是指向一维数组a的指针变量,则数组元素ai可用指针表示为*(p+i)、pi,也可用数组名表示为*(a+i),ai的地址可以表示为&ai、p+i、a+i。(4)使用字符型指针变量处理字符串是C语言中常用的一种方法,它首先通过一定的方式,使字符指针指向字符串,然后通过字符指针来访问字符串。,语言程序设计(第3版)张磊编著 清华大学出版社,小 结(2),(5)数组元素为指针类型的数组称为指针数组,指针数组中的每一个元素都是指针变量,它们指向相同类型的数据。引入指针数组的主要目的,是为了提高对多个字符串操作时的方便性和灵活性,尤其适合于长度不等的字符串的处理。(6)指针作为函数的参数时,在函数间传递的是变量的地址。简单指针变量作函数参数是指针作函数参数中最基本的内容,它的作用是实现一个简单变量的地址在函数中的传递。字符串指针作函数的参数与数组指针作函数参数没有本质的区别,函数间传递的都是地址值,所不同的仅是指针指向对象的类型不同而已。(7)函数返回值是指针类型的函数称为指针函数,使用指针函数可以获得更多的处理结果。需要特别特别注意的是,对于指针函数,用return返回的值必须是一个指针值。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号