[爆卦]function pointer用途是什麼?優點缺點精華區懶人包

為什麼這篇function pointer用途鄉民發文收入到精華區:因為在function pointer用途這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者openc ()看板C_and_CPP標題[問題] function pointer 的用處時間...



請教各位先進一下,

function pointer 最常用到的地方是在哪裡?

小弟雖然學過,但是卻從未使用過.. @@!

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.241.220
htorihpes:CALLBACK...MULTITHREAD... 11/29 17:00
freehaha:搭配GetProcAddress可以Call function in Library.. 11/29 18:29

> -------------------------------------------------------------------------- <

作者: 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
UNARYvvv:感謝您提供的網頁整理資料^^ 11/30 22:53

你可能也想看看

搜尋相關網站