- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
指向函数的指针
* Designed by @JFT * * * * * * * * * * * * * 全国计算机等级考试之 二级C语言 指向函数的指针 1. 函数指针的概念 一个函数在编译时,被分配了一个入口地址,这个地址就称为该函数的指针。函数名正是这个函数的入口地址。 可以用一个指针变量指向一个函数(函数的入口地址),然后通过该指针变量调用此函数。 指向函数的指针即“函数指针” 2. 指向函数的指针变量 (1)定义格式 函数类型 (*指针变量名)( 形参列表); 例如,int (*fp)(); 说明: 1)“函数类型”是指函数的返回值类型 2)“形参列表”是指指针变量所指的函数所带的参数列表 3) “*指针变量”外的括号不能缺,否则成了返回指针值的函数。 4)函数指针和它所指向的函数参数个数和类型都应该是一致的 2) (*fp)(int a,int b)表示定义了一个指向函数的指针变量,它不是固定指向哪个函数的,而只是表示定义了一个这种类型的变量,专门用来存放函数的入口地址的,它可以先后指向返回类型相同的不同函数 指向函数的指针变量=[]函数名; 例如: int f(int a,int b); int(*fp)(int a,int b); fp=f; 注意:1) 函数名后不能带括号和参数;函数名前的“”符号是可选的。 (2)赋值(函数指针的初始化) 指向函数的指针 (3)调用格式 (*函数指针变量)([实参表]) 用函数指针变量调用函数时,只需将(*fp)代替函数名即可(fp为指针变量),在(*fp)之后的括弧中根据需要写上实参。 函数名作实参时,因为要缺省括号和参数,造成编译器无法判断它是一个变量还是一个函数,所以必须加以说明。 指向函数的指针变量的常用用途之一,就是将函数指针作参数,传递到其它函数。 注意:1)对指向函数的指针变量,诸如p+i、p++/p--等运算是没有意义的。 优点:当每次调用某个函数时,该函数所调用的其他函数不是固定不变的,而是根据需要所调用的函数是不断变化的,这时如果用指向函数的指针作为参数,只需在调用的函数中将实参函数名改变即可,这样增加了函数的使用灵活性,可以编写一个通用函数来实现各种专用的功能。 3.指向函数的指针变量作函数参数 指向函数的指针 2)通过函数名的直接调用和通过指向该函数的指针调用效果一样的。 3)指向函数的指针也可以作为函数的参数,以便实现函数地址的传递,也就是将函数名传给形参 求两个数中较大者。 #includestdio.h int max(int a,int b) { int m; if(ab) m=a; else m=b; return m; } m=max(x,y) 查看程序运行结果 int main( ) { int (*fp) (int a,int b); int x,y,m; fp=max; scanf(“%d %d”,x,y); m=(*fp)(x,y); printf(“x=%d,y=%d,max=%d\n”,x,y,m); return 0; } 程序举例 例1 #include stdio.h #include math.h int f1(int a,int b) { return a+b;} int f2(int a,int b) { return a-b;} int f3(int a,int b) { return a*b;} int f4(int a,int b) { if(b!=0) return a/b; else { printf(error\n);return 0;} } int f5(int a,int b) { if(b!=0) return a%b; else { printf(error\n);return 0;} } 例2 程序结果为 void main() { int (*f)(); int a,b,c; a=53;b=44;c=35; f=f1; printf(a+b=%d\n,f(a,b)); f=f2; printf(a-b=%d\n,f(a,b)); f=f3; printf(a*b=%d\n,f(a,b)); f=f4; printf(a/b=%d\n,f(a,b)); f=f5; printf(a%%b
您可能关注的文档
最近下载
- 物联网安全与隐私保护:物联网系统安全PPT教学课件.pptx
- 慢性肾脏病5期贫血.pptx VIP
- 脑电图试卷.(DOC).doc VIP
- FLOW-3D软件Cast铸造模拟介绍.ppt VIP
- 三上《朝读经典》.pdf VIP
- NB∕T 31011-2019 陆上风电场工程设计概算编制规定及费用标准.pdf
- 1.1 常见的植物(教学课件)科学青岛版二年级上册2025.ppt
- 全身不同部位推拿按摩.pptx VIP
- 2021版ESD静电防护工程师及内审员培训课件(ANSI-ESD-S20.20-2021).pdf VIP
- 2025四川省水电投资经营集团有限公司所属电力公司员工招聘6人笔试备考题库及答案解析.docx VIP
文档评论(0)