指向函數的指針變量的一般形式為:
數據類型?? (*指針變量名)(函數參數表列);
如:?
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;
}
?
運行結果:
?
?
?
實用價值在于
在應用程序中常用菜單提示輸出一個數字,然后根據不同值執行不同的功能
,就是用此法。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
