指针指针数组、多级指针、动态指针

上传人:沈*** 文档编号:179749691 上传时间:2023-01-02 格式:PPT 页数:23 大小:449.52KB
返回 下载 相关 举报
指针指针数组、多级指针、动态指针_第1页
第1页 / 共23页
指针指针数组、多级指针、动态指针_第2页
第2页 / 共23页
指针指针数组、多级指针、动态指针_第3页
第3页 / 共23页
点击查看更多>>
资源描述
1数组指针以此类推v一维数组名是“列指针类型”-“元素指针类型”指针变量的定义:int*p;v二维数组名是“行指针类型”指针变量的定义:int(*p)4;v三维数组名是“页指针类型”指针变量的定义:int(*p)34;v四维数组名是“块指针类型”指针变量的定义:int(*p)345;圆括号是圆括号是必须的必须的2问题的提出v变量是用于存放单个数据的v数组是用于存放“同类型”的多个数据的方便循环控制结构的编程v指针变量是用于存放单个地址号的v“同类型”的多个地址号是否能够集中存储在一起构成“指针数组”呢?3v元素均为指针类型数据的数组,称为指针数组元素均为指针类型数据的数组,称为指针数组 v定义形式为:定义形式为:类型关键字类型关键字 *数组名数组名 数组长度数组长度;v例如例如 char*pStr5;四、指针数组四、指针数组注意注意没有没有 圆括号圆括号4例例:二维字符数组二维字符数组void main()int i;char str10=Pascal,Basic,Fortran,Java,Visual C;for(i=0;i5;i+)printf(%sn,stri);strPascalBasicFortranJava二维数组二维数组Visual C5例:字符指针数组例:字符指针数组void main()int i;char*ptr=Pascal,Basic,Fortran,Java,Visual C;for(i=0;i5;i+)printf(%sn,ptri);PascalBasicFortranJavaptr指针数组指针数组字符串字符串ptrVisual C6例例:字符串按字典顺序排序字符串按字典顺序排序二维数组编程二维数组编程char strN10=Pascal,Basic,Fortran,Java,Visual C;for(i=0;iN-1;i+)for(j=i+1;jN;j+)if(strcmp(strj,stri)0)strcpy(temp,stri);strcpy(stri,strj);strcpy(strj,temp);name0 P a s c a l 0 0 0 0 name1 B a s i c 0 0 0 0 0 name2 F o r t r a n 0 0 0 name3 J a v a 0 0 0 0 0 0 name4 V i s u a l C 0 0 name0 B a s i c 0 0 0 0 0 name1 F o r t r a n 0 0 0 name2 J a v a 0 0 0 0 0 0 name3 P a s c a l 0 0 0 0 name4 V i s u a l C 0 0 7例例:字符串按字典顺序排序字符串按字典顺序排序指针数组编程指针数组编程char *ptrN=Pascal,Basic,Fortran,Java,Visual C;for(i=0;iN-1;i+)for(j=i+1;jN;j+)if(strcmp(ptrj,ptri)1)printf(The other arguments are following:n);for(i=1;iargc;i+)printf(%sn,argvi);getch();echo.exehelloworldptr指针数组指针数组字符串字符串name10指针型函数指针型函数 一个函数可以返回一个一个函数可以返回一个intint型、型、floatfloat型、型、charchar型型的数据,也可以返回一个指针类型的数据,即地的数据,也可以返回一个指针类型的数据,即地址。址。返回指针值的函数(简称指针函数)的定义格式如返回指针值的函数(简称指针函数)的定义格式如下:下:函数类型函数类型 *函数名函数名(参数表参数表)例例 int int *f(int x,int y)f(int x,int y)11例例 求一维数组的最大值及其下标求一维数组的最大值及其下标vint*findMax(int x)vvint i,j;vj=0;vfor(i=1;ixj)vj=i;vreturn(&xj);vvvoid main()vvint a5=3,6,1,9,12,*max;vmax=findMax(a);vprintf(max%d=%d,max-a,*max);v12五、五、多级指针和动态指针多级指针和动态指针1.概念及定义概念及定义v定义定义:指向指针的指针指向指针的指针v一级指针一级指针:指针变量中存放目标变量的地址指针变量中存放目标变量的地址p1&p2&i3P2(指针变量指针变量)i(整型变量整型变量)例例 int *p1;int *p2;int i=3;p2=&i;p1=&p2;*p1=5;二级指针二级指针:指针变量中存放一级指针变量的地址指针变量中存放一级指针变量的地址例例 int *p;int i=3;p=&i;*p=5;&i3P(指针变量指针变量)i(整型变量整型变量)一级指针一级指针二级指针二级指针一级指针一级指针目标变量目标变量13(1)定义形式:定义形式:数据类型数据类型 *指针名指针名;如如 int *p,i=5,*pp;(2)赋值赋值 p=&i;pp=&p;(3)引用方法引用方法pp的值的值 *pp的值的值*pp的值的值多级指针定义形式多级指针定义形式14动态分配内存动态分配内存152.2.动态指针动态指针v为什么要动态分配内存为什么要动态分配内存?当事先不知道所需要处理的数据有多大时当事先不知道所需要处理的数据有多大时,使使用静态数组用静态数组,若数组开辟得太大若数组开辟得太大,则浪费内存资则浪费内存资源(甚至可能不成功)源(甚至可能不成功);若开辟得太小若开辟得太小,又不能又不能满足计算需要。采用动态分配内存的方法,使用满足计算需要。采用动态分配内存的方法,使用完毕,再释放内存,以备其它程序使用。完毕,再释放内存,以备其它程序使用。C C语言中提供了几个标准函数,以实现内存的语言中提供了几个标准函数,以实现内存的分配和释放。分配和释放。16动态分配内存动态分配内存v#include v#include vvoid*malloc(unsigned int size);向系统申请大小为向系统申请大小为size的内存块,把首地址返回。如果申请不成功,的内存块,把首地址返回。如果申请不成功,返回返回NULLvvoid*calloc(unsigned int num,unsigned int size);向系统申请向系统申请num个个size大小的内存块,把首地址返回。如果申请不大小的内存块,把首地址返回。如果申请不成功,返回成功,返回NULLvvoid free(void*p);释放由释放由malloc()和和calloc()申请的内存块。申请的内存块。p是指向此块的指针是指向此块的指针vvoid*类型的指针可以指向任意类型的变量类型的指针可以指向任意类型的变量17动态数组动态数组v一维动态数组一维动态数组 int *p=NULL;printf(Please enter array size:);scanf(%d,&n);p=(int*)malloc(n*sizeof(int);pi /像使用一维数组一样使用像使用一维数组一样使用v二维动态数组二维动态数组printf(Please enter array size m,n:);scanf(%d,%d,&m,&n);p=(int*)calloc(m*n,sizeof(int);pi*n+j);/像使用一维数组一样使用像使用一维数组一样使用18函数指针(选学)函数指针(选学)1.函数指针的概念函数指针的概念 一个函数在编译时,被分配了一个入口一个函数在编译时,被分配了一个入口地址,这个地址就称为该函数的指针。地址,这个地址就称为该函数的指针。可以用一个指针变量指向一个函数,然后通过可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数该指针变量调用此函数192.指向函数的指针变量指向函数的指针变量(1)定义格式)定义格式 函数类型函数类型 (*指针变量指针变量)();注意:注意:“*指针变量指针变量”外的括号不能缺,否则成了返回指针外的括号不能缺,否则成了返回指针值的函数。值的函数。例如,例如,int(*fp)();/*fp为指向为指向int函数的指针变量函数的指针变量*/(2)赋值)赋值 函数名代表该函数的入口地址。因此,可用函数函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值。名给指向函数的指针变量赋值。指向函数的指针变量指向函数的指针变量&函数名函数名;注意:函数名后不能带括号和参数;函数名前的注意:函数名后不能带括号和参数;函数名前的“&”符号符号是可选的。是可选的。20(3)调用格式调用格式 (*函数指针变量函数指针变量)(实参表实参表)3.指向函数的指针变量作函数参数指向函数的指针变量作函数参数 指向函数的指针变量的常用用途之一,就是将函数指针指向函数的指针变量的常用用途之一,就是将函数指针作参数,传递到其它函数。作参数,传递到其它函数。函数名作实参时,因为要缺省括号和参数,造成编译器函数名作实参时,因为要缺省括号和参数,造成编译器无法判断它是一个变量还是一个函数,所以必须加以函数说无法判断它是一个变量还是一个函数,所以必须加以函数说明。明。注意:对指向函数的指针变量,诸如注意:对指向函数的指针变量,诸如p+i、p+/p-等运算等运算是没有意义的。是没有意义的。21函数指针应用举例函数指针应用举例v查找第查找第1 1个与给定的参数个与给定的参数 e e满足满足“相关条件相关条件”的数据的数据元素序号;若表中没有符合该条件的元素,返回元素序号;若表中没有符合该条件的元素,返回0 0;否则,返回序号。否则,返回序号。int Locate(int*L,int n,int e,int(*f)(int,int)int i;for(i=0;iy;int xiaoyu(int x,int y)return xy;/*条件:大于给定值,并条件:大于给定值,并能被能被2整除的整除的*/int main()int a9=1,2,3,4,5,6,7,8,9;int x;int(*fun)(int,int);fun=xiaoyu;x=Locate(a,9,6,fun);printf(Locate:%dn,x);return 1;23v指针的概念指针的概念指针是一种特殊的数据类型指针是一种特殊的数据类型v指针的使用原则指针的使用原则永远要清楚指针变量存放的是什么,指向了什么永远要清楚指针变量存放的是什么,指向了什么 v指针与数组之间的关系指针与数组之间的关系理解一维数组与指针是理解二维数组与指针的基础理解一维数组与指针是理解二维数组与指针的基础掌握二维数组在内存中的存放方式,是理解二维数组的行指针和列掌握二维数组在内存中的存放方式,是理解二维数组的行指针和列指针的关键指针的关键v指针数组指针数组v指针函数指针函数v指针的应用指针的应用做函数参数,传地址调用做函数参数,传地址调用动态分配内存,实现动态数组,对于动态分配的内存,不要忘记在动态分配内存,实现动态数组,对于动态分配的内存,不要忘记在不使用时释放不使用时释放请自己总结这章所学内容请自己总结这章所学内容
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


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

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


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