2020年4月19日 星期日

C 語言 - function pointer 函數指標

function pointer 概念


    基本上有 data 的 pointer 就會有 function 的 pointer。
  • 正確的 ( 回傳 int 的 function )
  •     int (*pfi)();
  • 錯誤的 ( 回傳 int pointer 的 function )
  •     int *pfi();

function pointer 宣告


    利用 typedef,然後一樣用 & 取 function pointer
    extern int f1();
    
    typedef int (*funcptr)();
    funcptr pfi;
    pfi = &f1;
    實際上你可以省略 &,因為 function 若不呼叫,他就只能回傳 pointer ( 原文 : When you mention the name of a function but are not calling it, there's nothing else you could possibly be trying to do except generate a pointer to it. )
    pfi = f1;

function pointer 呼叫

  • 正確的 ( 回傳 int 的 function )
  •     int (*pfi)(arg1, arg2);
  • 錯誤的 ( 回傳 int pointer 的 function )
  •     int *pfi(arg1, arg2);
  • 省略的 ( 原理同上,function pointer 除了 Call function 只能 assign 另一 pointer 或比較其值,所以 Compiler 會將 pfi 視為 (*pfi)。) ( 原文 : There's nothing you can do with a function pointer except assign it to another function pointer, compare it to another function pointer, or call the function that it points to. )
  •     int pfi(arg1, arg2);

下一篇 : 

Related Posts:

  • BCB 筆記6 (Sender)說來慚愧,但我很後面才知道這東西 BCB 設計按鈕不外乎 TButton TBitBtn TSpeedButton 但按鈕通常邏輯差不多,只是因為傳的值不一樣而用不同 Button 然後程式碼變成這樣 void __fastcall TMainForm::TButton1Click(TObject *Sender) { MyButtonFunction("TButton1"); } void __fastcall TMainFor… Read More
  • BCB 筆記4 (DrawText)在 BCB 裡設計表格類的東西 幾乎都是從 TCustomGrid 繼承而來 在填入表格值都是用 DrawText 來填值 而我們要改變一些東西,例如文字置中 就要自己下 DrawText 的參數 首先第一步,把 DefaultDrawing 的值改為 Fault 不改的話會 DrawText 兩次,造成重疊 第二步改寫 OnDrawCell void __fastcall TMainForm::LGridDrawCell(TObject … Read More
  • BCB 筆記5 (TValueListEditor)轉報告下一步就是自動產生報告 要自動產生報告,不外乎就是填表格。 你可以用 DrawGrid 或 StringGrid 來製作表格 但我認為 DrawGrid 和 StringGrid 都是完成度很高的元件 完成度很高代表若目的與設計方向不同,用起來就會綁手綁腳 要覆寫很多功能或者沒有與你目的相同的東西 我想當初 Grid 就是來完成表格,不是給你填, 所以在填值方面不會有太多方便的功能。 填表格通常會想要用下拉式表單 ( ComboBox … Read More
  • BCB 筆記1 (MessageBox、ComboBox) 寫有介面的程式時常會需要跳出訊息 這裡介紹Application->MessageBox int MessageBox(const char* Text, const char* Caption, int Flags); 這裡沒啥好講的 想寫的幾乎都會變照抄網上的東西,所以就給連結當備份吧 1. http://yanjuns.blogspot.tw/2015/06/cbuilder-vcl.html 2. http:/… Read More
  • BCB 筆記7 (StrToInt)報告在製作時,一定會遇到要字串轉數字 在 BCB 裡有方便的函式 常見的有 String str = "123" int x = StrToInt(str); float y = StrToFloat(str); 但有時候不一定可以轉成數字 這時就可用 String str = "@123" int x; float y; bool z; z = TryStrToInt(s… Read More

0 意見:

張貼留言

Popular Posts