位置:首頁(yè) > 軟件操作教程 > 編程開發(fā) > C語(yǔ)言 > 問(wèn)題詳情

C語(yǔ)言 指向函數(shù)的指針變量作函數(shù)參數(shù)

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-01

    函數(shù)的參數(shù)可以是變量、數(shù)組名、指向變量或數(shù)組的指針,其實(shí)指向函數(shù)的指針也可以作為函數(shù)參數(shù),這也是指向函數(shù)的指針的常用用途。例如設(shè)計(jì)一個(gè)函數(shù),希望傳遞給函數(shù)不同的實(shí)參,使函數(shù)實(shí)現(xiàn)不同的功能。為實(shí)現(xiàn)這個(gè)函數(shù),可以在函數(shù)的形參中設(shè)置一個(gè)指向函數(shù)的指針,根據(jù)函數(shù)調(diào)用傳遞的函數(shù)名,指向不同的函數(shù),實(shí)現(xiàn)不同的功能。

【例題】設(shè)計(jì)求最大值、最小值、和的函數(shù)

    設(shè)計(jì)一個(gè)函數(shù)fun(),使之能實(shí)現(xiàn)求兩個(gè)數(shù)的最大值、最小值、兩數(shù)之和等功能,在main()函數(shù)中選擇不同的選項(xiàng)執(zhí)行fun()函數(shù)實(shí)現(xiàn)不同的功能。

    算法分析:

    設(shè)計(jì)三個(gè)函數(shù)max()、min()、add()分別實(shí)現(xiàn)求最大值、最小值、和等功能。

    函數(shù)fun()的形參中除了包括兩個(gè)整型形參外,還應(yīng)包括一個(gè)指向函數(shù)的指針fp。fp的作用是根據(jù)用戶給出的不同選擇指向不同的函數(shù),以實(shí)現(xiàn)指向不同的功能。

程序代碼如下:

#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)          /*根據(jù)不同的選擇調(diào)用fun()函數(shù)執(zhí)行不同的操作*/

        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)                        /*求最大值函數(shù)*/

{

    return(x>y?x:y);

}

int min(int x,int y)                        /*求最小值函數(shù)*/

{

    return(x<y?x:y):

}

int add(int x,int y)                        /*求和函數(shù)*/

{

    return(x+y):

)

int fun(int x,int y,int(*f p)(int ,int))    /*fun()函數(shù)*/

{

    int result; 

    result=(*fp)(x,y); 

    return result;

}


程序執(zhí)行,屏幕顯示提示信息:

    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

輸出結(jié)果為:

    the sum is :68

    不同選擇,將max()、min()、add()函數(shù)名賦給fun()函數(shù)的形參:指向函數(shù)的指針fp。指針fp指向某函數(shù)后,在fun()函數(shù)體內(nèi)調(diào)用相應(yīng)函數(shù),并將函數(shù)返回值作為fun()函數(shù)返回值帶回main()函數(shù)。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部