位置:首页 > 软件操作教程 > 编程开发 > C语言 > 问题详情

C语言 指向函数的指针变量作函数参数

提问人:刘团圆发布时间:2020-12-01

    函数的参数可以是变量、数组名、指向变量或数组的指针,其实指向函数的指针也可以作为函数参数,这也是指向函数的指针的常用用途。例如设计一个函数,希望传递给函数不同的实参,使函数实现不同的功能。为实现这个函数,可以在函数的形参中设置一个指向函数的指针,根据函数调用传递的函数名,指向不同的函数,实现不同的功能。

【例题】设计求最大值、最小值、和的函数

    设计一个函数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()函数。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部