函数的参数可以是变量、数组名、指向变量或数组的指针,其实指向函数的指针也可以作为函数参数,这也是指向函数的指针的常用用途。例如设计一个函数,希望传递给函数不同的实参,使函数实现不同的功能。为实现这个函数,可以在函数的形参中设置一个指向函数的指针,根据函数调用传递的函数名,指向不同的函数,实现不同的功能。
【例题】设计求最大值、最小值、和的函数
设计一个函数fun(),使之能实现求两个数的最大值、最小值、两数之和等功能,在main()函数中选择不同的选项执行fun()函数实现不同的功能。
算法分析:
设计三个函数max()、min()、add()分别实现求最大值、最小值、和等功能。
函数fun()的形参中除了包括两个整型形参外,还应包括一个指向函数的指针fp。fp的作用是根据用户给出的不同选择指向不同的函数,以实现指向不同的功能。
程序代码如下:
#include <stdio.h>
int max(int x,int y);
int min(int x,int y);
int add(int x,int y);
int fun(int x,int y, int(*fp)(int,int));
main()
{
int a,b,k;
printf("please input a & b : ");
scanf ("%d%d",&a,&b);
printf("please select 1,2 or 3:\n\n");
/*输出各种选择代表的含义*/
printf("1: Calculate the maximum of a & b!\n");
printf("2: Calculate the minimum of a & b!\n");\
printf("3: Calculate the sum of a & b!n");
scanf("%d",$k);
if(k—1) /*根据不同的选择调用fun()函数执行不同的操作*/
printf("the max is :%d\n",fun(a,b,niax));
else if(k*BM2)
printf ("the min is :%d\n",fun(a,b,min));
else if(k==3)
printf("the sum is :%d\n",fun(a,b,add));
else
printf("Bad select!");
}
int max(int x,int y) /*求最大值函数*/
{
return(x>y?x:y);
}
int min(int x,int y) /*求最小值函数*/
{
return(x<y?x:y):
}
int add(int x,int y) /*求和函数*/
{
return(x+y):
)
int fun(int x,int y,int(*f p)(int ,int)) /*fun()函数*/
{
int result;
result=(*fp)(x,y);
return result;
}
程序执行,屏幕显示提示信息:
please input a & b:
输入:
12 56
屏幕显示选择提示信息:
please select 1,2 or 3:
1: Calculate the maximum of a & b!
2: Calculate the minimum of a & b!
3: Calculate the sum of a & b!
选择:
3
输出结果为:
the sum is :68
不同选择,将max()、min()、add()函数名赋给fun()函数的形参:指向函数的指针fp。指针fp指向某函数后,在fun()函数体内调用相应函数,并将函数返回值作为fun()函数返回值带回main()函数。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>