指针指针数组、多级指针、动态指针课件.ppt

指针指针数组、多级指针、动态指针课件.ppt

ID:57124965

大小:223.00 KB

页数:23页

时间:2020-08-01

上传者:U-5097
指针指针数组、多级指针、动态指针课件.ppt_第1页
指针指针数组、多级指针、动态指针课件.ppt_第2页
指针指针数组、多级指针、动态指针课件.ppt_第3页
指针指针数组、多级指针、动态指针课件.ppt_第4页
指针指针数组、多级指针、动态指针课件.ppt_第5页
资源描述:

《指针指针数组、多级指针、动态指针课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

数组指针——以此类推一维数组名是“列指针类型”----“元素指针类型”指针变量的定义:int*p;二维数组名是“行指针类型”指针变量的定义:int(*p)[4];三维数组名是“页指针类型”指针变量的定义:int(*p)[3][4];四维数组名是“块指针类型”指针变量的定义:int(*p)[3][4][5];圆括号是必须的1 问题的提出变量是用于存放单个数据的数组是用于存放“同类型”的多个数据的方便循环控制结构的编程指针变量是用于存放单个地址号的“同类型”的多个地址号是否能够集中存储在一起构成“指针数组”呢?2 元素均为指针类型数据的数组,称为指针数组定义形式为:类型关键字*数组名[数组长度];例如char*pStr[5];pStr[5]*char四、指针数组注意没有圆括号3 例:二维字符数组voidmain(){inti;charstr[][10]={"Pascal","Basic","Fortran","Java","VisualC"};for(i=0;i<5;i++){printf("%s ",str[i]);}}strstr[0]Pascalstr[1]str[2]str[3]BasicFortranJava二维数组VisualCstr[4]4 例:字符指针数组voidmain(){inti;char*ptr[]={"Pascal","Basic","Fortran","Java","VisualC"};for(i=0;i<5;i++){printf("%s ",ptr[i]);}}ptr[0]Pascalptr[1]ptr[2]ptr[3]BasicFortranJavaptr指针数组字符串ptrVisualCptr[4]5 例:字符串按字典顺序排序—二维数组编程charstr[N][10]={"Pascal","Basic","Fortran","Java","VisualC"};for(i=0;i1){printf("Theotherargumentsarefollowing: ");for(i=1;ix[j])j=i;return(&x[j]);}voidmain(){inta[5]={3,6,1,9,12},*max;max=findMax(a);printf("max[%d]=%d",max-a,*max);}11 五、多级指针和动态指针1.概念及定义定义:指向指针的指针一级指针:指针变量中存放目标变量的地址p1&p2&i3P2(指针变量)i(整型变量)例int**p1;int*p2;inti=3;p2=&i;p1=&p2;**p1=5;二级指针:指针变量中存放一级指针变量的地址例int*p;inti=3;p=&i;*p=5;&i3P(指针变量)i(整型变量)一级指针二级指针一级指针目标变量12 (1)定义形式:数据类型**指针名;如int*p,i=5,**pp;(2)赋值p=&i;pp=&p;(3)引用方法pp的值*pp的值**pp的值多级指针定义形式13 动态分配内存14 2.动态指针为什么要动态分配内存?当事先不知道所需要处理的数据有多大时,使用静态数组,若数组开辟得太大,则浪费内存资源(甚至可能不成功);若开辟得太小,又不能满足计算需要。采用动态分配内存的方法,使用完毕,再释放内存,以备其它程序使用。C语言中提供了几个标准函数,以实现内存的分配和释放。15 动态分配内存#include#includevoid*malloc(unsignedintsize);向系统申请大小为size的内存块,把首地址返回。如果申请不成功,返回NULLvoid*calloc(unsignedintnum,unsignedintsize);向系统申请num个size大小的内存块,把首地址返回。如果申请不成功,返回NULLvoidfree(void*p);释放由malloc()和calloc()申请的内存块。p是指向此块的指针void*类型的指针可以指向任意类型的变量16 动态数组一维动态数组int*p=NULL;printf("Pleaseenterarraysize:");scanf("%d",&n);p=(int*)malloc(n*sizeof(int));…p[i]//像使用一维数组一样使用…二维动态数组printf("Pleaseenterarraysizem,n:");scanf("%d,%d",&m,&n);p=(int*)calloc(m*n,sizeof(int));…p[i*n+j]);//像使用一维数组一样使用…17 函数指针(选学)1.函数指针的概念一个函数在编译时,被分配了一个入口地址,这个地址就称为该函数的指针。可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数18 2.指向函数的指针变量(1)定义格式函数类型(*指针变量)();注意:“*指针变量”外的括号不能缺,否则成了返回指针值的函数。例如,int(*fp)();/*fp为指向int函数的指针变量*/(2)赋值 函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值。 指向函数的指针变量=[&]函数名;注意:函数名后不能带括号和参数;函数名前的“&”符号是可选的。19 (3)调用格式(*函数指针变量)([实参表])3.指向函数的指针变量作函数参数指向函数的指针变量的常用用途之一,就是将函数指针作参数,传递到其它函数。函数名作实参时,因为要缺省括号和参数,造成编译器无法判断它是一个变量还是一个函数,所以必须加以函数说明。注意:对指向函数的指针变量,诸如p+i、p++/p--等运算是没有意义的。20 函数指针应用举例查找第1个与给定的参数e满足“相关条件”的数据元素序号;若表中没有符合该条件的元素,返回0;否则,返回序号。intLocate(int*L,intn,inte,int(*f)(int,int)){inti;for(i=0;iy;}intxiaoyu(intx,inty){returnx

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭