函数指针系列:用指向函数的指针作函数参数
来源:互联网 发布:mac锁定键盘快捷键 编辑:程序博客网 时间:2024/05/17 07:31
指向函数的指针变量的用途之一就是可以把该函数的入口地址作为参数传递到其它函数(传递给形参)。
原理举例:
有一个函数名为fun的函数,它有两个形参x1和x2,并且定义x1和x2为指向函数的指针变量。在调用fun函数时,实参的两个函数名为f1和f2,这样给fun形参传递的就是f1和f2函数的入口地址。如此在fun函数中就可以调用f1和f2函数。下面假设x1对应的实参函数为f1,x2对应的实参函数为f2:
int fun(int(*x1)(int,char),int(*x2)(int,int)){ int a=1,b=2,c=3; int result1,result2=0; char d='a'; result1=(*x1)(a,d); //调用f1函数,a,b是实参 result2=(*x2)(b,c); //调用f2函数,b,c是实参}
在fun函数中,声明的形参x1和x2是指向函数的指针变量,x1指向的f1函数有一个int型和一个char型形参,x2指向的f2函数有两个int型形参。
a,b,c,d是调用f1和f2函数时所要求的实参。在fun函数没有被调用的时候,该函数的指针变量x1和x2并不占用内存空间,也不指向任何函数。在fun函数被调用时,此时函数f1和f2的入口地址传送到了fun函数形参x1和x2(即x1和x2指向函数f1和f2),所以通过* x1和 * x2就可以调用函数f1和函数f2, ( * x1)(a,d)相当于f1(a,b),( * x2)(b,c)相当于f2(b,c)。
用指向函数的指针作函数参数的方法对于要调用“不固定函数”的函数是非常方便的。
举例:
#include<stdio.h>#include <windows.h>int Max(int a,int b);int Min(int a,int b);int Sum(int a,int b);void fun(int a,int b,int(*p)(int,int));int main(void){ int a,b; int n=0; printf("输入两个整数:\n"); scanf("%d %d",&a,&b); printf("请用数字选择要进行的运算:1求最大,2求最小,3求和\n"); scanf("%d",&n); if(n==1) fun(a,b,Max); else if(n==2) fun(a,b,Min); else if(n==3) fun(a,b,Sum); else printf("输入选择有误!\n"); system("pause"); return 0;}void fun(int x,int y,int(*p)(int,int)){ int result; result=(*p)(x,y); printf("%d\n",result); }int Max(int x,int y){ int z; if(x>y) z=x; else z=y; printf("max="); return z;}int Min(int x,int y){ int z; if(x<y) z=x; else z=y; printf("min="); return z;}int Sum(int x,int y){ int z; z=x+y; printf("sum="); return z;}
运行结果:
比较5和6,选择1,调用Max函数
比较5和6,选择2,调用Min函数
比较5和6,选择3,调用Sum函数
在定义fun函数时,在函数首部使用“int(*p)(int,int)”声明形参p是指向函数的指针,该函数是整形函数,有两个整形实参。不论是调用Max,Min,Sum函数fun改变的只是实参函数名而已,这就增加了函数使用的灵活性。
- 函数指针系列:用指向函数的指针作函数参数
- 用指向指针的指针作函数的参数(指针、指针数组、指向指针的指针)
- 函数max用指向对象的指针作函数参数
- 知识点:用指向函数的指针作函数参数
- 用指向函数的指针作函数参数
- 用指向函数的指针作函数参数
- 指向数组的指针作函数参数
- 用指向数组的指针作函数参数
- 用指向数组的指针作函数参数
- 用指向数组的指针作函数参数.etc
- 指向函数的指针作函数的参数
- c语言 指向函数的指针作函数参数
- //8----14//指向数组的指针作函数参数
- C++老话题:用指向函数的指针作函数参数
- 用指向函数的指针作函数参数2(c语言)
- 用指针作函数参数
- 函数指针作函数参数/用函数指针调用函数
- 函数,const指针参数,递归,指向函数的指针
- 你能卖什么,决定了你的收入落在什么档次
- PAC理论
- 数安时代(GDCA)与深信服携手合作,签订战略合作协议
- SQL日期函数获取系统当前时间
- Unity优化之遮挡剔除Occlusion Culling
- 函数指针系列:用指向函数的指针作函数参数
- Linux 标准目录结构
- 消息队列的应用场景理解
- 802.11帧格式
- android 跳转第三方地图(百度,高德,谷歌)
- 最近开发写了两个简单的进度条控件,分享一下
- 比较
- 《程序员生存定律》读书笔记
- Django的MVC结构