線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2413
推到 Plurk!
推到 Facebook!

指標函數的功用?

 
stone886
一般會員


發表:32
回覆:15
積分:9
註冊:2003-09-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-21 17:19:08 IP:220.141.xxx.xxx 未訂閱

請問一下,指標函數它會有什麼功用嗎?

thx

justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-22 09:50:42 IP:59.105.xxx.xxx 未訂閱
可在執行時期動態決定要呼叫哪個函式
舉例來說:
switch (user_key)
{
case '1':
fun1();
case '2':
fun2();
...
}
這樣寫很沒效率

改成這樣
fun_ptr funs[]={&fun1, &fun2, ...}; //將所有要用到的函式整理成一個陣列,都是存函式指標
...
直接呼叫 funs[user_key]; //就直接呼叫那個函式


aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-07-26 07:04:54 IP:61.229.xxx.xxx 未訂閱

另提供一些應用上小小的看法:

1/ 常用於 callback ,是windows 程式很重要的觀念,所有的window 訊息處理函數都是以function pointer的形式註冊在os上。當os有需要處理該ap時,就會用此function pointer來回呼你寫的widows訊息處理式。

2/常用於將function傳入給另一個function。比如說c library中的 void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *)); 最後一個參數就是function pointer。為的是可以讓你自定排序的方式,傳入給qsort作協同處理。

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-07-26 07:09:18 IP:61.229.xxx.xxx 未訂閱

轉貼一下 bcb 說明書上的例子,看了可能明白些。至於 callback的例子…就自己找一下吧 ^ ^

#include
#include
#include

int sort_function( const void *a, const void *b);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };

int main(void)
{
int x;

qsort((void *)list, 5, sizeof(list[0]), sort_function);
for (x = 0; x < 5; x )
printf("%s\n", list[x]);
return 0;
}

int sort_function( const void *a, const void *b)
{
return( strcmp((char *)a,(char *)b) );
}

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2024-05-04 10:30:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!