發表文章

目前顯示的是 7月, 2017的文章

(c/c++) Function Pointer函式指標兩三事 (Function Pointer 的 typedef 與 Array of Function Pointer)

圖片
 Function Pointer 定義: Function Pointer (中文直譯「函式指標」),即為 儲存某一個函式起始memory address的 變數 ,此變數可以提供我們在之後進行呼叫。 乍聽之下,function pointer就只是多一個別名再呼叫,似乎沒什麼實質的用處,但其實我們可以藉由function pointer省去繁複的 if/switch,後面會一一介紹。 使用方法:  現在假設我們有以下這個函式: int Square(int n) {     return n*n; } 然後宣告一個function pointer變數,以便於指向函式Square: int (*fptr)(int); fptr = Square; 這邊有幾個小細節必須注意: 1.最前面的int是變數data type(資料型態),和要指向的函式回傳值型態相同。第一個小括號代表指標變數名稱,第二個小括號代表傳入的parameter資料型態們,且理所當然的type必須與我們要指向的函式傳入值相同。 2. function pointer 的 pointer operator(*) 必須與變數名稱一起被小括號括起來 並接參數的小括號。若沒有這個小括號,會變成以下: int *fptr(int); 在意義上,表示fptr為一個"函式"而不是變數,回傳的資料型態為 int* ,會有3種情況;     a. 回傳一個pointer of int(整數指標變數的指標) -> int *a; return a;     b. 回傳一個address of int(整數一般變數的位址) -> int a; return &a;     c. 回傳一個int array(整數型態的陣列) -> int a[100]; return a; 延伸: 在知道function pointer的妙用前,還必須介紹以下兩種功能: 1.typedef typedef是c/c++中的關鍵字,其允許programmer為data type(資料型態)創造一個全新的名字。同時也可以為函式創造一個別名,其好處在於若要把function當做一參數傳入另外一fumcti