《指针程序设计》PPT课件

上传人:muw****50 文档编号:245330013 上传时间:2024-10-08 格式:PPT 页数:42 大小:435KB
返回 下载 相关 举报
《指针程序设计》PPT课件_第1页
第1页 / 共42页
《指针程序设计》PPT课件_第2页
第2页 / 共42页
《指针程序设计》PPT课件_第3页
第3页 / 共42页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,语言程序设计(第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 指针变量,指针,每一个变量,计算机都指定一段内存用以存储变量值。变量使用的这段内存的开始地址,称为变量的地址。在C语言中,把变量的地址称为指针。简单的说,指针就是变量的地址。,指针变量,专门用来保存指针的一类变量,通过指针变量就可以实现对其他变量的访问。,指针变量可以指向任何一种数据类型,如可以指向基本类型的变量,也可以指向数组等。,语言程序设计(第3版)张磊编著 清华大学出版社,变量的直接访问和间接访问,变量直接访问,是指通过变量名直接使用变量数据。,例如:,int a=10,b=20,c;,c=a+b;,printf(%dn,c);,变量间接访问是指通过指针变量去访问其他变量数据。,语言程序设计(第3版)张磊编著 清华大学出版社,7.2 指针变量的定义和使用,7.2.1,指针变量程序示例,7.2.2,定义指针变量,7.2.3,使用指针变量,语言程序设计(第3版)张磊编著 清华大学出版社,7.2.1 指针变量程序示例,例7-1,使用指针变量输出数据程序。,/*program e7-1.c*/,#include,void main(),int a,b;,int*p1,*p2;/*定义指针变量*/,a=100;b=10;,p1=/*p1指向a*/,p2=/*p2指向b*/,printf(%d%dn,a,b);,printf(%d%dn,*p1,*p2);,语言程序设计(第3版)张磊编著 清华大学出版社,7.2.2 定义指针变量,一般格式,数据类型,*指针变量名1,*指针变量名2,;,例如:,int,*p1,*p2;,float,*q;,指针变量允许和其他变量同时定义:,char,ch,*str;,注意,“数据类型”是指针变量要指向的变量的数据类型,。,语言程序设计(第3版)张磊编著 清华大学出版社,7.2.3 使用指针变量,1指针变量的初始化,一般格式,数据类型*指针变量名1=地址1,*指针变量名2=地址2,;,例如:int m;,int*p=&m,;,2使用赋值语句赋值,一般格式,指针变量,=,变量地址,;,例如:,int,m=196,*p,*q,;,p=&m,;,q=p,;,p,m,&m,p,196,&m,q,语言程序设计(第3版)张磊编著 清华大学出版社,7.2.3 使用指针变量,3使用指针变量输入数据,当指针变量有了确切的指向目标后,即可使用该指针变量为指向的目标输入数据。,int a,*p;,p=,scanf(%d,p);,scanf语句的功能与下列语句等价:,scanf(%d,4访问指针所指向的变量,对于指针变量p,访问其指向的变量时,使用“*”运算符:,*p,例如,对上面的程序段,输出变量a的数据:,printf(%d,*p);,其中,*p表示p指向的目标a。,语言程序设计(第3版)张磊编著 清华大学出版社,使用指针变量,例7-2,输入a和b两个整数,然后按先大后小的顺序输出。,#include,void main(),int*p1,*p2,*p,a,b,;,printf(Input:);,scanf(%d,%d,p1=,p2=,if(ab),p=p1;p1=p2;p2=p,;,printf(Output:);,printf(%d,%dn,*p1,*p2);,语言程序设计(第3版)张磊编著 清华大学出版社,7.3 指针与数组,指针与一维数组,7.3.2,指针与二维数组,7.3.3,指针与字符串,7.3.4,指针数组,语言程序设计(第3版)张磊编著 清华大学出版社,指针与一维数组,主要内容,如何把一个指针和一维数组关联起来,即怎样使指针指向一维数组,如何使用指针访问一维数组的元素,要解决的问题,用指针实现一维数组的数据处理,语言程序设计(第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)等价。,10,20,30,40,50,a0,a1,a2,a3,a4,p,P+1,P+2,P+3,P+4,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.1 指针与一维数组,例7-3,用指针实现一维数组的输入输出。,/*program e7-3-1.c*/,#include,#define N 10,void 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 10,void 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,用指针编写一维数组的排序程序。,#include,#define N 10,void main(),int aN,i,j,temp,*p;,printf(Data:);,for(p=a;pa+N;p+),scanf(%d,p);,for(i=1;iN;i+),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 指针与二维数组,10,20,30,40,80,70,60,50,18,27,36,45,回顾二维数组的存储,10,a00,20,a01,30,a02,40,a03,80,a10,70,a11,60,a12,50,a13,18,a20,27,a21,36,a22,45,a23,int a34;,p,p+1,p+2,p+3,p+4,p+5,p+6,p+7,p+8,p+9,p+10,p+11,如何使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,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*/,#include,void 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);,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.2 指针与二维数组,例7-6,求二维数组元素的最大值,并确定最大值元素所在的行和列。,/*program e7-6.c*/,#include,void 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;i3;i+),for(j=0;jmax),max=*(p+i*4+j);,row=i;,col=j;,printf(a%d%d=%dn,row,col,max);,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.3 指针与字符串,使字符型指针指向字符串的方法,通过定义指针变量时初始化指向字符串。,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*/,#include,void 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:%sn,b);,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.4 指针数组,数组元素为指针类型的数组称为指针数组,指针数组中的每一个元素都是指针变量。,一维指针数组的定义形式如下:,数据类型*数组名数组长度;,例:,char*days7;,该语句定义了一个名为days的字符型指针数组,其每一个元素都是指向char变量的指针变量。,指针数组的每个元素是指针变量,只能存放地址,所以对指向字符串的指针数组赋初值时,要把存放字符串的首地址赋给指针数组的对应元素。,例:,char*days7=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;,语言程序设计(第3版)张磊编著 清华大学出版社,7.3.4 指针数组,指针数组元素,days0,days1,days2,days3,days4,days5,days6,字符串,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,char*days7,=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;,例7-9,分行输出days数组指向的字符串。,#include,void main(),int i;,char,*days7,=Sunday,Monday,Tuesday,Wednesd
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!