為什麼這篇函式指標好處鄉民發文收入到精華區:因為在函式指標好處這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者openc ()看板C_and_CPP標題[問題] function pointer 的用處時間...
請教各位先進一下,
function pointer 最常用到的地方是在哪裡?
小弟雖然學過,但是卻從未使用過.. @@!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.241.220
> -------------------------------------------------------------------------- <
作者: UNARYvvv (有趣生活) 看板: C_and_CPP
標題: Re: [問題] function pointer 的用處
時間: Tue Nov 29 23:06:54 2005
※ 引述《openc ()》之銘言:
: 請教各位先進一下,
: function pointer 最常用到的地方是在哪裡?
: 小弟雖然學過,但是卻從未使用過.. @@!
舉個例子
某 BBS 站,決定使用者按鍵的動作
就是利用一個 array of function pointers
預先設定好各個字母所要執行的功能,也就是先指定個別的 function pointer
例如:
KeyFunc keys[MAX_KEYNUM] ; // KeyFunc 是一種 function pointer type
keys['A'] = &keyFuncA; // 可不寫 &
keys['B'] = &keyFuncB;
...
這樣子在執行時讀取到一個使用者的按鍵內容
經過檢查為合法按鍵值後,便可以直接進行相關的處理動作
( *(keys[按鍵值]) )( 引數內容 ); // 可不用寫 * 號
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.70.137.117
※ 編輯: UNARYvvv 來自: 61.70.137.117 (11/29 23:08)
> -------------------------------------------------------------------------- <
作者: qazq (...) 看板: C_and_CPP
標題: Re: [問題] function pointer 的用處
時間: Wed Nov 30 00:43:16 2005
※ 引述《openc ()》之銘言:
: 請教各位先進一下,
: function pointer 最常用到的地方是在哪裡?
: 小弟雖然學過,但是卻從未使用過.. @@!
目前我自己會用到的時機是在於,針對不同按鍵呼叫不同 function
(BBS 應該都是這樣的架構)
舉個例子來說....
struct commands
{
int (*fptr) ();
int key;
};
typedef struct commands commands;
int do_a(void), do_b(void), do_c(void);
int main()
{
int ch, key;
commands commandlist[] =
{
do_a, 'a',
do_b, 'b',
do_c, 'c',
NULL, '\0'
};
commands *commandPtr;
while (1)
{
ch = getch();
if (ch == 'q')
break;
commandPtr = commandlist;
for (; key = commandPtr->key, commandPtr++)
if (ch == key)
{
commandPtr->fptr();
break;
}
// 用上面這樣的好處是....如果當我的按鍵對應的 function 有很多的話
// 不用 function 指標,那我可能就要寫一個很大的 switch 然後一堆 case
}
return 0;
}
int do_a() // do_b() do_c() 類似....
{
printf("你按了 a 這個鍵\n");
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.140.43.139
> -------------------------------------------------------------------------- <
作者: jenallen (reborn) 看板: C_and_CPP
標題: Re: [問題] function pointer 的用處
時間: Wed Nov 30 10:50:45 2005
※ 引述《UNARYvvv (有趣生活)》之銘言:
: ※ 引述《openc ()》之銘言:
: : 請教各位先進一下,
: : function pointer 最常用到的地方是在哪裡?
: : 小弟雖然學過,但是卻從未使用過.. @@!
: 舉個例子
: 某 BBS 站,決定使用者按鍵的動作
: 就是利用一個 array of function pointers
: 預先設定好各個字母所要執行的功能,也就是先指定個別的 function pointer
: 例如:
: KeyFunc keys[MAX_KEYNUM] ; // KeyFunc 是一種 function pointer type
: keys['A'] = &keyFuncA; // 可不寫 &
: keys['B'] = &keyFuncB;
: ...
: 這樣子在執行時讀取到一個使用者的按鍵內容
: 經過檢查為合法按鍵值後,便可以直接進行相關的處理動作
: ( *(keys[按鍵值]) )( 引數內容 ); // 可不用寫 * 號
有人整理得很好http://www.newty.de/fpt/index.html :)
我個人最常的使用時機(同時符合才行):
1. 具有一樣輸入輸出但是動作不同的functions
2. 這些functions有共同的使用時機及規範
便會考慮用function pointer將這些不同的動作封裝起來。
這樣做的優點在於可以一個function pointer便將可能所需的各式動作用一致的
表示法來處理(啊,這不就是多型的概念嗎?:P)所以可用簡潔的方式動態地執
行所需的對應動作,以避免用switch case所帶來的大規模修改。
但是缺點也不少,至少我們必須確定function pointer所指的function是我們所
規範的那個function集合才行,不然不小心invoke一個只是符合輸入輸出但卻八
竿子打不著關係的function也是枉然...:)
例子嘛,在用C寫的程式中不少,除了U大的例子外,Unix中的virtual file system,
signal, callback function....很多
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.163.118