C语言-指向多维数组的指针.ppt_第1页
C语言-指向多维数组的指针.ppt_第2页
C语言-指向多维数组的指针.ppt_第3页
C语言-指向多维数组的指针.ppt_第4页
C语言-指向多维数组的指针.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Chapter8善于利用指针,Contents,8.6返回指针值的函数,8.7指针数组和多重指针,8.8动态分配内存和指向它的变量,8.5指向函数的指针,通过指针引用二维数组,a34=1,2,3,4,5,6,7,8,9,10,11,12;,由三个1维数组组成,分别是a0a1a2P246图8.19,图8.20和表8.2比较好的复习资料。,通过指针引用二维数组,165514,265516,365518,465520,565522,665524,765526,865528,a,a+1,a+2,a0,a0+1,a0+2,a0+3,a是行指针,a0,a1,a2是列指针,965530,1065532,1165534,1265536,通过指针引用二维数组,165514,265516,365518,465520,565522,665524,765526,865528,a,a+1,a+2,a0,a0+1,a0+2,a0+3,a是行指针,a0,a1,a2是列指针,965530,1065532,1165534,1265536,*printf(“%u,%un”,a,*a);printf(“%u,%un”,a0,*(a+0);printf(“%u,%un”,165514,265516,365518,465520,565522,665524,765526,865528,a,a+1,a+2,a0,a0+1,a0+2,a0+3,965530,1065532,1165534,1265536,指向二维数组元素的指针,实质,整型指针。,例8.12用指向元素的指针变量输出二维数组各元素的值。,p=a0;或p=,pa0+12;p+或pp+,指向由m个元素组成的1维数组的指针,引例8.13inta34=;int(*p)4;/表示定义一个数组,4表示数组中有4个元素,int表示数组为整型数组。*表示p是一个指针变量。p=a;/a可以赋给p,因为=两边类型一致并且可以通过p间接访问a。,指向由m个元素组成的1维数组的指针,为什么一定要为数组定义一个指针变量,然后进行p=a;再进行p+的操作?,因为数组名a是一个常量,表示数组的首地址,不能进行a+的操作。,指向由m个元素组成的1维数组的指针,为什么一定要为数组定义一个指针变量,然后进行p=a;再进行p+的操作?,因为数组名a是一个常量,表示数组的首地址,不能进行a+的操作。,不能忽略的一个程序:inta4=1,3,5,7;int(*p)4;p=,二维数组做实参,行指针变量做形参,例8.14,floatscore34=;search(score,3);,voidsearch(float(*p)4,n)/用n接收要处理的行数for(i=0;in;i+)for(j=0;j4;j+)pij=100;/*(*(p+i)+j)=100,二维数组做实参,行指针变量做形参,例8.14,floatscore34=;search(score,3);,voidsearch(float(*p)4,n)/用n接收要处理的行数for(i=0;in;i+)for(j=0;j4;j+)pij=100;/*(*(p+i)+j)=100,p=score,“=”两边类型一致,如果定义指向函数的指针变量。模仿指向m个元素的一维数组指针变量int(*p)4,8.5指向函数的指针,编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(入口地址),称作这个函数的指针。,intmax(int,int)int(*p)(int,int),如果定义指向函数的指针变量。模仿指向m个元素的一维数组指针变量int(*p)4,8.5指向函数的指针,编译时,编译系统为函数代码分配一段存储空间,这段存储空间的其实地址(入口地址),称作这个函数的指针。,intmax(int,int)int(*p)(int,int),此时,可以将max赋给p,因为类型一致。p=max,8.5指向函数的指针,intmax(int,int)int(*p)(int,int),此时,可以将max赋给p,因为类型一致。p=max,例8.22用函数求整数a和b的大者。,inta,b,c;intmax(int,int);int(*p)(int,int);p=max;/获得max函数入口scnaf(“%d%d%d”,/去执行max函数,intmax(intx,inty),例8.22输入两个整数,然后让用户选择1或2,选1时,调用max,选2时,调用min,inta,b,c,n;intmax(int,int);intmin(int,int);int(*p)(int,int);scanf(“%d%d%d”,intmax(intx,inty),intmin(intx,inty),用函数指针作函数参数,voidfun(int(*x1)(int),int(*x2)(int)inta,b,i=3,j=5;a=(*x1)(i);/间接执行函数f1b=(*x2)(j);/间接执行函数f2intf1(intn)intf2(intn),fun(f1,f2);,用函数指针作函数参数,fun(f1,f2);,x1=f1,x2=f2,voidfun(int(*x1)(int),int(*x2)(int)inta,b,i=3,j=5;a=(*x1)(i);/间接执行函数f1b=(*x2)(j);/间接执行函数f2intf1(intn)intf2(intn),例8.24输入1,调用max;输入2,调用min输入3,调用add,intfun(intx,inty,int(*p)(int)intresult;result=(*p)(x,y);returnresult;,if(n=1)fun(a,b,max);,if(n=2)fun(a,b,min);,if(n=3)fun(a,b,add);,intmax(intx,inty),intmin(intx,inty),intadd(intx,inty),8.6指针作函数的返回值,一般形式:int*fun(),引例,自定义函数fun,找出二维数组a中最小值,并将该最小值的地址作为结果返回给主调函数。,int*fun(intarr4)int*q=,inta34=5,8,6,2,7,4,9,6,5,4,1,3;int*pmax;pmax=fun(a);printf(“%d”,*pmax);,8.6指针作函数的返回值,阅读例8-25,26中,观察函数search的返回值类型,观察return的结果,并注意主调函数中怎样接收结果。,8.8动态分配内存,需要时申请,不需要时释放。目的:提高内存的利用率。,malloc(100)/开辟100字节的空间,返回值为空间首地址。,函数原型:void*malloc(unsignedint)/#include“alloc.h”,应用中,将返回值强制转换成需要的类型。如:int*pp=(int*)malloc(100);类似于intp50,区别是静态和动态,内存利用率不同。,8.8动态分配内存,需要时申请,不需要时释放。目的:提高内存的利用率。,malloc(100)/开辟10字节的空间,返回值为空间首地址。,函数原型:void*malloc(unsignedint)/#include“alloc.h”,应用中,将返回值强制转换成需要的类型。如:int*pp=(int*)malloc(50*sizeof(int);类似于intp50,区别是静态和动态,内存利用率不同。,8.8动态分配内存,需要时申请,不需要时释放。目的:提高内存的利用率。,malloc(100)/开辟10字节的空间,返回值为空间首地址。,int*p;p=(int*)malloc(10*sizeof(int);for(i=0;i10;i+)scanf(“%d”,p+i);,8.8动态分配内存,需要时申请,不需要时释放。目的:提高内存的利用率。,(2)calloc(10,2)/通常用来保存一个1维数组,int*p;p=(int*)calloc(10,2);for(i=0;i10;i+)scanf(“%d”,p+i);,calloc通常用于动态数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论