全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:824
推到 Plurk!
推到 Facebook!

這語法是.....?

尚未結案
蜻蜓草
一般會員


發表:22
回覆:30
積分:10
註冊:2002-03-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-22 09:05:05 IP:61.219.xxx.xxx 未訂閱
不好意思小弟是新手, 這是在書上看到的 , 實在是不了瞭解.....    
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-22 11:16:58 IP:218.160.xxx.xxx 未訂閱
先把問題簡單化  
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-22 11:21:37 IP:61.222.xxx.xxx 未訂閱
關於你的問題呢 其實你不用看到 怪怪的程式碼就覺得 看不懂  它其實還是遵循著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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-23 11:58:50 IP:61.219.xxx.xxx 未訂閱
感謝~~ 總算是看懂了.... void (*hand_f[])(void) = { get_status, clear_feature, reserved, set_feature, reserved }; 那是不是.... 裡面只能放相同類型的東西呢 ? 回傳值的形態和function 傳遞值也要一樣呢?
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-23 12:15:42 IP:61.222.xxx.xxx 未訂閱
引言: 裡面只能放相同類型的東西呢 ? 回傳值的形態和function 傳遞值也要一樣呢?
關於你這個問題 答案是 沒錯 要一樣 還有阿 其實你可以寫一個小程式試一下 這樣就知道了
蜻蜓草
一般會員


發表:22
回覆:30
積分:10
註冊:2002-03-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-24 08:41:28 IP:61.219.xxx.xxx 未訂閱
呵~ 謝謝兩位前輩的指點 不然一開始實在看不懂這這種用法~
系統時間:2024-05-20 11:17:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!