這語法是.....? |
尚未結案
|
蜻蜓草
一般會員 發表:22 回覆:30 積分:10 註冊:2002-03-18 發送簡訊給我 |
不好意思小弟是新手, 這是在書上看到的 , 實在是不了瞭解.....
void (*hand_f[])(void) = { get_status, clear_feature, reserved, set_feature, reserved, set_address, get_descriptor, reserved, get_configuration, set_configuration, get_interface, set_interface, reserved, reserved, reserved, reserved }; 裡面的都是 function 這麼呼叫 (*hand_f[integer])();發表人 - taishyang 於 2003/10/22 13:00:20 |
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
先把問題簡單化
void (*p)(); void a() { ShowMessage("A"); } void b() { ShowMessage("B"); } void __fastcall TForm1::Button1Click(TObject *Sender) { p = a; (*p)(); p = b; (*p)(); }假如這個懂了,那再轉成用陣列來表示,就比較容易暸解,但有些基本的用法,我覺得還是用背的比較簡單. void (*p)(); void a() { ShowMessage("A"); } void b() { ShowMessage("B"); } void (*hand_f[])(void) = {a,b}; void __fastcall TForm1::Button1Click(TObject *Sender) { p = a; (*p)(); p = b; (*p)(); (*hand_f[0])(); (*hand_f[1])(); } |
mkbobo
一般會員 發表:4 回覆:68 積分:19 註冊:2003-04-10 發送簡訊給我 |
關於你的問題呢
其實你不用看到 怪怪的程式碼就覺得 看不懂
它其實還是遵循著c的語法的
首先先解釋 在 class="code">
*hand_f << 這是啥 是不是只是個單純的指標呢 ^^
hand_f[] << 這是啥 是不是只是個未定義大小的陣列呢
*hand_f[] << 這是啥 是不是只是個未定義大小的 指標 陣列
()(void) << 這是啥 是不是只是一個沒有代參數(void)的function 的定義ex. int aa(void) 這個也等於 int (aa)(void)
(*hand_f[])(void) << 這是啥 是不是只是個 未定義大小的 指標 陣列 的function
而 一個正常的function 還需要啥 一個回傳值
但是這裡 他寫的viod 並不是指回傳值 而是定義型態 例如 int a; 我定義了一個 int型態的值
所以同理可證 viod a; 就是定義了一個 void 型態的值
然後在同理可證 void (*hand_f[])(void) = {...};
簡而言之就是定義了 ...裡面所有的funcion的指標 所以 (*hand_f[integer])(); << 這個東西 就是呼叫
它其中之一的function ex. get_status, clear_feature, ...
get_status ... 這些 應該就是程式裡面其中的一個 function 就是副程式
integer 在這裡 算是指向它的第幾個 index 寫到這裡 希望你看的懂 還有如果我有說錯哪一部份 煩請指證謝謝
>
|
蜻蜓草
一般會員 發表:22 回覆:30 積分:10 註冊:2002-03-18 發送簡訊給我 |
|
mkbobo
一般會員 發表:4 回覆:68 積分:19 註冊:2003-04-10 發送簡訊給我 |
|
蜻蜓草
一般會員 發表:22 回覆:30 積分:10 註冊:2002-03-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |