函數指針引用
① 用函數指針指向要調用的函數,並進行調用,此題運行會出錯。
這題出的有問題!
在最新版本的C/C++編譯中是編譯不通過的!(也許老版本的編譯器支持!)
因為f1(double) 和f2(double,double)參數個數不同,所以函數指針定義這樣寫是不對的。
你若想編譯通過,只能定義兩個指針
#include<stdio.h>
doublef1(doublex)
{returnx*x;}
doublef2(doublex,doubley)
{returnx*y;}
doublefun(doublea,doubleb)
{
/**********found**********/
double(*fa)(double);//一個參數的
double(*fb)(double,double);//兩個參數的
doubler1,r2;
/**********found**********/
fa=f1;//修改f=fa
r1=fa(a);//修改f=fa
/**********found**********/
fb=f2;//修改f=fb
r2=(*fb)(a,b);//修改f=fb
returnr1+r2;
}
main()
{
doublex1=5,x2=3,r;
r=fun(x1,x2);
printf(" x1=%f,x2=%f,x1*x1+x1*x2=%f ",x1,x2,r);
}
② 當函數參數使用引用傳參時,怎樣通過函數指針來調用它呢
typedef int (*pfn)(int &,int &);
pfn Max=max;
int a=0,b=1;
Max(a,b);
這樣有錯嗎?
③ 如何通過函數指針調用函數
一般需要定義一個函數指針類型
typedef int (*function_pointer_t) ( int arg1, int arg2 );
然後,定義函數指針變數
function_pointer_t fp_invoker = 0;
函數指針可以動態改變內容,改變調用對象,假設有兩個函數
int function_sum( int arg1, int arg2 )
{
return arg1+arg2;
}
int function_sub( int arg1, int arg2 )
{
return arg1-arg2;
}
注意到兩個函數的原型與函數指針類型是一致的。以下是調用
fp_invoker = function_sum; // 直接用函數名賦值即可
fp_invoker(1,2); // 調用時,可以認為函數指針便是函數名,此時調用加法
fp_invoker = function_sub; // 同理,切換到減法
fp_invoker(1,2); // 調用減法
以上都是直觀的用法,通常函數指針用於回調,即下層函數先將函數指針內容保存起來,處理結束後,再調用。此時要注意首先檢查函數指針內容是否為空。
if( fp_invoker ){
fp_invoker( arg1, arg2 );
}
④ 如何引用作用域外的函數指針
先在頭文件聲明函數,然後在cpp中實現時,聲明一個Class A類型的變數,比如是m,然後調用m.AWndProc()
⑤ 在C語言中,指向函數的指針怎麼調用函數
其實,函數指針確實不是「指向函數的指針」
函數指針,就是函數指針,加不加*沒有實際意義。
二樓的那個:
c=(*p)(a,b);
也可以寫成
c=(****************************************************p)(a,b);
或者
c=p(a,b);
你說它指向什麼?
PS,加*有特殊的用途,初學者就算了