




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1数组指针以此类推v一维数组名是“列指针类型-“元素指针类型v指针变量的定义:int *p;v二维数组名是“行指针类型v指针变量的定义:int (*p)4 ;v三维数组名是“页指针类型v指针变量的定义:int (*p)34 ;v四维数组名是“块指针类型v指针变量的定义:int (*p)345 ;圆括号是圆括号是必需的必需的2问题的提出v变量是用于存放单个数据的v数组是用于存放“同类型的多个数据的v方便循环控制构造的编程v指针变量是用于存放单个地址号的v“同类型的多个地址号能否可以集中存储在一同构成“指针数组呢?3v元素均为指针类型数据的数组,称为指针数组元素均为指针类型数据的数组,称为指针数组
2、 v定义方式为:定义方式为: v 类型关键字类型关键字 * *数组名数组名 数组长度数组长度; ;v例如例如v char char * *pStr5; 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
3、() 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)
4、 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
5、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指针数组指针数组字符串字符串name1
6、0指针型函数指针型函数 一个函数可以前往一个一个函数可以前往一个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;v
7、for(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=&am
8、p;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.动态
9、指针动态指针为什么要动态分配内存为什么要动态分配内存? ? 当事先不知道所需求处置的数据有多大时当事先不知道所需求处置的数据有多大时, , 运运用静态数组用静态数组, , 假设数组开辟得太大假设数组开辟得太大, , 那么浪费内那么浪费内存资源甚至能够不胜利存资源甚至能够不胜利; ; 假设开辟得太小假设开辟得太小, , 又不能满足计算需求。采用动态分配内存的方法,又不能满足计算需求。采用动态分配内存的方法,运用终了,再释放内存,以备其它程序运用。运用终了,再释放内存,以备其它程序运用。 C C言语中提供了几个规范函数,以实现内存的言语中提供了几个规范函数,以实现内存的分配和释放。分配和释放。16
10、动态分配内存动态分配内存v#include v#include vvoid* malloc(unsigned int size);v向系统恳求大小为向系统恳求大小为size的内存块,把首地址前往。假设恳求不胜利,前的内存块,把首地址前往。假设恳求不胜利,前往往NULLvvoid* calloc(unsigned int num, v unsigned int size);v向系统恳求向系统恳求num个个size大小的内存块,把首地址前往。假设恳求不胜利,大小的内存块,把首地址前往。假设恳求不胜利,前往前往NULLvvoid free(void* p);v释放由释放由malloc()和和call
11、oc()恳求的内存块。恳求的内存块。p是指向此块的指针是指向此块的指针vvoid*类型的指针可以指向恣意类型的变量类型的指针可以指向恣意类型的变量17动态数组动态数组v一维动态数组一维动态数组v int *p = NULL;vprintf(Please enter array size:);vscanf(%d, &n); vp = (int *) malloc(n * sizeof (int);v vpi /像运用一维数组一样运用像运用一维数组一样运用vv二维动态数组二维动态数组vprintf(Please enter array size m,n:);vscanf(%d,%d, &a
12、mp;m, &n); vp = (int *) calloc(m * n, sizeof (int);vvpi*n+j); /像运用一维数组一样运用像运用一维数组一样运用v18函数指针选学函数指针选学1.函数指针的概念函数指针的概念 一个函数在编译时,被分配了一个入口一个函数在编译时,被分配了一个入口地址,这个地址就称为该函数的指针。地址,这个地址就称为该函数的指针。可以用一个指针变量指向一个函数,然后经过可以用一个指针变量指向一个函数,然后经过该指针变量调用此函数该指针变量调用此函数192.指向函数的指针变量指向函数的指针变量1定义格式定义格式 函数类型函数类型 (*指针变量指针变量
13、)( ); 留意:留意:“*指针变量外的括号不能缺,否那么成了前往指指针变量外的括号不能缺,否那么成了前往指针值的函数。针值的函数。 例如,例如,int (*fp)( ); /* fp为指向为指向int函数的指针变量函数的指针变量*/2赋值赋值 函数名代表该函数的入口地址。因此,可用函数函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值。名给指向函数的指针变量赋值。 指向函数的指针变量指向函数的指针变量&函数名函数名; 留意:函数名后不能带括号和参数;函数名前的留意:函数名后不能带括号和参数;函数名前的“&符号符号是可选的。是可选的。20(3)调用格式调用格式
14、 (*函数指针变量函数指针变量)(实参表实参表)3.指向函数的指针变量作函数参数指向函数的指针变量作函数参数 指向函数的指针变量的常用用途之一,就是将函数指针指向函数的指针变量的常用用途之一,就是将函数指针作参数,传送到其它函数。作参数,传送到其它函数。 函数名作实参时,由于要缺省括号和参数,呵斥编译器函数名作实参时,由于要缺省括号和参数,呵斥编译器无法判别它是一个变量还是一个函数,所以必需加以函数说无法判别它是一个变量还是一个函数,所以必需加以函数说明。明。 留意:对指向函数的指针变量,诸如留意:对指向函数的指针变量,诸如p+i、p+/p-等运算等运算是没有意义的。是没有意义的。21函数指针
15、运用举例函数指针运用举例v查找第查找第1 1个与给定的参数个与给定的参数 e e满足满足“相关条件的数据相关条件的数据元素序号;假设表中没有符合该条件的元素,前往元素序号;假设表中没有符合该条件的元素,前往0 0;否那么,前往序号。;否那么,前往序号。vint Locate(int int Locate(int * *L,int n,int e,int (L,int n,int e,int (* *f)(int,int) f)(int,int) v int i; int i;vfor ( i=0;in;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了解一维数组与
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025合同模板-星河图书馆场地借用协议(星河)
- 2025中学设施设备采购合同范本
- 2025年柔性制造单元(FMC)项目建议书
- 2025年肠外营养药项目合作计划书
- 2025年玛丽珍鞋合作协议书
- 2025劳动合同终止不想续约需提交辞职申请
- 2025自动化设备维护、修理合同
- 2025年杀虫杀螨混剂项目建议书
- 2025年聚砜及其合金合作协议书
- 2025年镀锡板卷(马口铁)合作协议书
- 2025年广东省广州市华兴教育港澳台联考学校高考英语二模试卷
- 2025-2030显示电源管理IC行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 盘扣双包合同协议
- (四调)武汉市2025届高中毕业生四月调研考试 历史试卷(含答案)
- 苏霍姆林斯基的教育思想
- DBJ50-T-232-2016 建设工程监理工作规程
- 2025年陕西延长石油集团矿业公司招聘笔试参考题库含答案解析
- 加油站的物联网技术应用
- 《跟上兔子》绘本五年级第1季A-Magic-Card教学课件
- 安全文明离校主题班会
- GB/T 44994-2024声学助听器验配管理
评论
0/150
提交评论