C語言 指向函數(shù)的指針變量作函數(shù)參數(shù)
函數(shù)的參數(shù)可以是變量、數(shù)組名、指向變量或數(shù)組的指針,其實指向函數(shù)的指針也可以作為函數(shù)參數(shù),這也是指向函數(shù)的指針的常用用途。例如設計一個函數(shù),希望傳遞給函數(shù)不同的實參,使函數(shù)實現(xiàn)不同的功能。為實現(xiàn)這個函數(shù),可以在函數(shù)的形參中設置一個指向函數(shù)的指針,根據(jù)函數(shù)調(diào)用傳遞的函數(shù)名,指向不同的函數(shù),實現(xiàn)不同的功能。
【例題】設計求最大值、最小值、和的函數(shù)
設計一個函數(shù)fun(),使之能實現(xiàn)求兩個數(shù)的最大值、最小值、兩數(shù)之和等功能,在main()函數(shù)中選擇不同的選項執(zhí)行fun()函數(shù)實現(xiàn)不同的功能。
算法分析:
設計三個函數(shù)max()、min()、add()分別實現(xiàn)求最大值、最小值、和等功能。
函數(shù)fun()的形參中除了包括兩個整型形參外,還應包括一個指向函數(shù)的指針fp。fp的作用是根據(jù)用戶給出的不同選擇指向不同的函數(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
輸出結果為:
the sum is :68
不同選擇,將max()、min()、add()函數(shù)名賦給fun()函數(shù)的形參:指向函數(shù)的指針fp。指針fp指向某函數(shù)后,在fun()函數(shù)體內(nèi)調(diào)用相應函數(shù),并將函數(shù)返回值作為fun()函數(shù)返回值帶回main()函數(shù)。
點擊加載更多評論>>