- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(5) 两个指针变量比较 若两个指针指向同一个数组的元素,则可以进行比较。指向前面的元素的指针变量“小于”指向后面元素的指针变量。 8.8.3 void指针类型 ANSIC新标准增加了一种“void”指针类型,即可定义一个指针变量,但不指定它是指向哪一种类型数据的。ANSIC标准规定用动态存储分配函数时返回void指针,它可以用来指向一个抽象的类型的数据,在将它的值赋给另一指针变量时要进行强制类型转换使之适合于被赋值的变量的类型。例如: char*p1; void*p2; … p1=(char *)p2; 同样可以用(void *)p1将p1的值转换成void *类型。如: p2=(void *)p1; 也可以将一个函数定义为void *类型,如: void *fun(char ch1,char ch2) 表示函数fun返回的是一个地址,它指向“空类型”,如需要引用此地址,也需要根据情况对之进行类型转换,如对该函数调用得到的地址要进行以下转换: p1=(char *)fun(ch1,ch2); int add(int x,int y) /* 函数定义 */ { intz; z=x+y; return(z); } void process(int x,int y,int (*fun)(int,int)) { int result; result=(*fun)(x,y); printf(″%d\n″, result); } (1)函数process处理两个整数数,并输出一个值。同时又要求process具有通用处理能力(处理求大数、小数、和),所以可以考虑在调用process时将相应的处理方法(“处理函数”)传递给process。 (2)process函数要接受函数作为参数,即process应该有一个函数指针作为形式参数,以接受函数的地址。这样process函数的函数原型应该是: int process(int x,int y,int (*f)()); (3)“函数指针作为函数参数”的使用与前面介绍的步骤完全相同,即函数指针变量的定义-在通用函数process的形参定义部分实现;函数指针变量的赋值-在通用函数的调用的虚实结合时实现;用函数指针调用函数-在通用函数内部实现。 (4)main函数调用通用函数process处理计算两数中大数的过程是这样的: l将函数名max(实际是函数max的地址)连同要处理的两个整数a,b一起作为process函数的实参,调用process函数。 lprocess函数接受来自主调函数main传递过来的参数,包括两个整数和函数max的地址,函数指针变量fun获得了函数max的地址。 l在process函数的适当位置调用函数指针变量fun指向的函数,即调用max函数。这样调用点就获得了两数大数的结果,由printf函数输出结果。 同样,main函数调用通用函数process处理计算两数小数、和的过程基本一样。 (5)process函数头部:函数指针定义中不需要指定形参个数。但是一般情况函数指针指向的函数参数个数一般是数量类型相同的,以便用统一的格式如(*f)(x,y)去调用。 ?process函数是一个“通用”整数处理函数,它使用函数指针作为其中的一个参数,以实现同一个函数中调用不同的处理函数。 8.6 返回指针值的函数 一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。其概念与以前类似,只是带回的值的类型是指针类型而已。 这种带回指针值的函数,一般定义形式为 类型名 *函数名(参数表列); 例如: int *a(int x,int y); 例:返回两个数中大数地址的函数。 int *fun(int,int); main() { int i,j,*p; printf(enter two num to i,j:); scanf(%d%d,i,j); p=fun(i,j); /* 调用fun,返回大数地址,赋值给指针变量p */ printf(max=%d\n,*p); /* 打印p指向的数据 */ }? int *fun(int x,int y) /* fun函数返回形参x,y中较大数的地址(指针) */ { int *z; if(xy)z=x; else z=y; return z; } 结果: enter two num to i,j:12 38 max=38 说明: (1)main函数从键盘获得两个整数i,j(本例12,38)。将i,j作为实参调用fun。 (2)通过虚实结合,fun函数的形参x,y获得了这两个整数(本例12,38),将大数的地
您可能关注的文档
最近下载
- 实验六文本文件的简单应用.doc VIP
- 厨房各作业区点心配菜冷菜间卫生控制.pdf VIP
- 生产安全管理人员考试_金属冶炼(铝及铝合金制造与铸造)_练习题及答案_共350题_第2套_2021_练习模式.pdf VIP
- 风景园林(景观设计)专业中级职称理论考试题库-上(单选题汇总).docx VIP
- 药事管理与法规课程标准.docx VIP
- IEC60664-1 2007 - 标准体系文件资料.pdf VIP
- 10J121《外墙外保温建筑构造》.pdf
- 风景园林(景观设计)专业中级职称理论考试题库-下(多选题汇总).docx VIP
- 危重患者的病情观察ppt课件.pptx VIP
- 《用字母表示数》说课稿-2024-2025学年五年级上册数学人教版[001].docx
文档评论(0)