關於函式指標ㄉ問題 |
尚未結案
|
Sarick
一般會員 ![]() ![]() 發表:14 回覆:19 積分:6 註冊:2004-01-19 發送簡訊給我 |
小弟有一個關於函式指標ㄉ問題想請教各位前輩.... void func1(void);
void func2(void);
void func3(void);
void func3(void); Typedef void (*fewfunc)(void); const fewfunc[2][2] =
{
{
func1,
func2
}
{
func3,
func4
}
} 做完上面ㄉ宣告,小弟可以像下面這樣呼叫函式ㄇ ?? (fewfunc[1][1])();//呼叫func1 感謝各位前輩指教...
|
richtop
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
Sarick 您好: 基本上您的觀念是對的,不過陣列的索引是從零開始,所以您的數值有點不正確。
不好意思,為了方便說明,改寫您的程式碼。運算子優先順序可參考線上說明。
//--------------------------------------------------------------------------- void func00(void) { ShowMessage("func00"); } void func01(void) { ShowMessage("func01"); } void func10(void) { ShowMessage("func10"); } void func11(void) { ShowMessage("func11"); } typedef void (*pfunc)(void); const pfunc fewfunc[2][2] = { { func00, func01 }, { func10, func11 } }; void __fastcall TForm1::Button1Click(TObject *Sender) { fewfunc[0][0](); // []的優先順序與()相同,但先左後右 ( fewfunc[1][0] )(); // 避免混淆可加括號() ShowMessage( IntToHex((__int64)(&fewfunc[1][0]), 4) ); // 將函數位址當成數值看待。 ( &(*fewfunc[1][1]) )(); // []的優先順序高於*; } //---------------------------------------------------------------------------RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
hornacek
一般會員 ![]() ![]() 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
|
hornacek
一般會員 ![]() ![]() 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
引言: ShowMessage( IntToHex((__int64)(&fewfunc[1][0]), 4) ); // 將函數位址當成數值看待。用這個來看位置,更是奇怪? ShowMessage( IntToHex((__int64)(&fewfunc[1][0]), 4) ); => 403308 ShowMessage( IntToHex((__int64)(fewfunc[1][0]), 4) ); => 401818 ShowMessage( IntToHex((__int64)(*fewfunc[1][0]), 4) ); => 401818請問這三個分別代表什麼?感激! |
richtop
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
hornacek 您好: 因為寫的時候太晚了(應該說太"早"了),所以有點神智不清,多寫了一些東西,模糊了焦點,把大家弄混了!
引言: ShowMessage( IntToHex((__int64)(&fewfunc[1][0]), 4) ); => 403308 //&fewfunc[1][0]表示fewfunc[1][0]存在記憶體中的位址。 ShowMessage( IntToHex((__int64)(fewfunc[1][0]), 4) ); => 401818 ShowMessage( IntToHex((__int64)(*fewfunc[1][0]), 4) ); => 401818 fewfunc[1][0]:存函式func10的位址。 *fewfunc[1][0]:取得fewfunc[1][0]所存位址裡的值,也就是函式func10的值,與func10的位址相同,即func10。上述說明或有不儘精確之處,希望大家指正,讓它更準確,謝謝! |
hornacek
一般會員 ![]() ![]() 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
|
Sarick
一般會員 ![]() ![]() 發表:14 回覆:19 積分:6 註冊:2004-01-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |