指向函數的指針變量的一般形式為:
數據類型?? (*指針變量名)(函數參數表列);
如:? int (*p)(int ,int );
1、int (*p)(int ,int );表示定義一個指向函數的指針變量p,它不是固定只能指向某一個函數。在一個程序中,一個指針變量可以先后指向同類型的不同函數。
2、給函數指針賦值時,只須給出函數名而不必給出參數。
如: p=max;如果寫成 p=max(a,b); 是將函數max(a,b);所得到的函數值賦給p,而不是將函數入口賦給p。
3、用函數指針變量調用函數時,只須將(*p)代替函數名即可。如: c=(*p)(a,b);
4、指向函數的指針變量,像p+n、p++、p--等運算是無意義的。
代碼:
輸入兩個整數,然后用戶選擇1或2,選1輸出較大值,選2輸出較小值。
程序代碼:
#include<stdio.h>
void main()
{
????int max(int ,int );
????int min(int ,int );
????int (*p)(int ,int );
????int a,b,c,n;
????printf("please enter a and b:");
????scanf("%d%d",&a,&b);
????printf("please choose 1 or 2:");
????scanf("%d",&n);
????if(n==1)
????????p=max;
????else if(n==2)
????????p=min;
????c=(*p)(a,b);
????printf("a=%d,b=%d,",a,b);
????if(n==1)
????????printf("max=%d\n",c);
????else
????????printf("min=%d\n",c);
}
int max(int a,int b)
{
????return a>b?a:b;
}
int min(int a,int b)
{
????return a<b?a:b;
}
void main()
{
????int max(int ,int );
????int min(int ,int );
????int (*p)(int ,int );
????int a,b,c,n;
????printf("please enter a and b:");
????scanf("%d%d",&a,&b);
????printf("please choose 1 or 2:");
????scanf("%d",&n);
????if(n==1)
????????p=max;
????else if(n==2)
????????p=min;
????c=(*p)(a,b);
????printf("a=%d,b=%d,",a,b);
????if(n==1)
????????printf("max=%d\n",c);
????else
????????printf("min=%d\n",c);
}
int max(int a,int b)
{
????return a>b?a:b;
}
int min(int a,int b)
{
????return a<b?a:b;
}
運行結果:
?
實用價值在于在應用程序中常用菜單提示輸出一個數字,然后根據不同值執行不同的功能,就是用此法。
?