發信人qrtt1.bbs@bbs.sayya.org (foolish),
看板Programming
標 題Re: [問題]這是 function 還是變數??
發信站SayYA 資訊站 (Wed Jul 19 08:44:47 2006)
轉信站ptt!ctu-reader!news.nctu!SayYa
※ 引述《HaWay (哈維 - 掛線中...)》之銘言:
> 有一種宣告好像是這樣 :
> static void (*single_server_pre_accept) (char *, char **);
> 使用上是這樣用的
> if (single_server_pre_accept)
> single_server_pre_accept(single_server_name, single_server_argv);
> 沒有任何 code 去處理 傳入的變數 single_server_name, single_server_argv .
> 可以被 if 判斷, 又沒有任何傳入參數,
> 後面又塞兩個參數進去, 也沒有其他副程式處理.
> 這是哪種型態的宣告啊??
> 謝謝~
function pointer
目的是定一個function的"型式",
成為一種默契讓要自行實作的人明白要有什麼樣的回傳值,什麼樣的參數
像qsort函式,他提供了一個比較用的function
但是沒有寫死在上面,而是提供了function pointer的參數可以傳入
這是一種演算方式"委外"的機制
那天您大爺心情好想要asc order那天又變了心想要變成desc order
或是亂數排列,都只要修改自己的function pointer
不用動到原本設計好的qsort
這樣"委外"的好處是當以上的需求有改變時
可以簡單的僅修改某部分的程式,而不用動到原本設計好的方法
========================================================
static void (*single_server_pre_accept) (char *, char **);
對任何一個回傳是static void
且傳入參數為char *, char**
的函式都可以指名給這個function pointer
呵,別忘了在大部分的c學習教材都有試著讓人函一下function的address
所以,別懷疑function真的有一個address可以被pointer pointer
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: 163.26.34.214
推 march20:疑問: 倒底 static 是 qualify 這個 ptr 71.137.27.253 07/19 09:44
推 march20:還是 ptr 指到的 function ? 71.137.27.253 07/19 09:44
推 qrtt1:pointer to function address 163.26.34.214 07/19 09:45
推 ledia:static function 就是 static function ptr 140.112.30.56 07/19 10:55
推 march20:感覺上 match "static" function 不太合理 71.137.27.253 07/19 11:31
推 march20:btw, static ptr 要怎麼宣告呢? 71.137.27.253 07/19 11:32
推 march20:int (static *fp)(char*,char**) ? 71.137.27.253 07/19 11:33
推 march20:呃, int 改成 void, 一時眼殘 XD 71.137.27.253 07/19 11:35
推 cole945:static修飾的是sspa吧@o@" 是不是指向220.139.130.179 07/19 13:34
→ cole945:static的function應該沒有呀呀._."220.139.130.179 07/19 13:34