Function Pointer 顧名思義,就是指向 Function 的指標
在 C 語言中,不論是 variable、array、struct、或是 function(一段程式碼),都有所屬的啟始記憶體位置
由此可知,main function 也是有其啟始記憶體位置。
而 function pointer 的宣告跟使用 function 時所要注意的地方是相同的,有以下幾點必須注意:
- 回傳值型態(return type)
- 參數數量(augument count)
- 參數型態(argument type)
以下直接用一個簡單範例來說明 function pointer 的使用:
從上面的範例可以看出,doAdd() 與 doMinus() 兩個 function 的回傳值型態、參數數量、參數型態都是相同的,只是名稱不同而已。#include <stdio.h>
//function宣告
int doAdd(int, int);
int doMinus(int, int);
int main(void) {
//宣告 function pointer
//注意所設定的參數數量與型態
int (*my_func_ptr)(int, int);
//function pointer 指向 doAdd
my_func_ptr = doAdd;
printf("function pointer 指向 doAdd => %d\n", (*my_func_ptr)(5, 3)); //結果:8
//function pointer 指向 doMinus
my_func_ptr = doMinus;
printf("function pointer 指向 doMinus => %d\n", (*my_func_ptr)(5, 3)); //結果:2
return 0;
} //end main
int doAdd(int a, int b) {
return a + b;
} //end doAdd
int doMinus(int a, int b) {
return a - b;
} //end doMinus
而名稱不同,卻不影響 function pointer 的使用,因為我們所用的是 function 的啟始記憶體位置
而 function pointer 的使用,有一點相當重要,即是 function pointer 的宣告;而 function pointer 的宣告,即是要注意到「回傳值型態」、「參數數量」、「參數型態」這三個部分。
當 function pointer 的宣告完成後,另外一個需要注意的就是每個 function 的啟始記憶體位置;而每個function 的啟始記憶體位置,即為 function 的名稱。
在程式中,就是透過將 function pointer 指向不同 function 的啟始記憶體位置,來執行不同的 function。
參考資料
感謝大大的教學
回覆刪除感謝大大的教學
回覆刪除感謝大大:))
回覆刪除感謝大大的教學 可以參考整理在hackmd上嗎?
回覆刪除請隨意囉.....
刪除Thanks for sharing : )
回覆刪除我想問二維該怎麼做 我試了三天未果
回覆刪除