今天在研究 C Function Pointer 的部分,原本有些誤解,後來查了一些資料後,終於釐清 Function Pointer 的觀念了!
Function Pointer 顧名思義,就是指向 Function 的指標
在 C 語言中,不論是 variable、array、struct、或是 function(一段程式碼),都有所屬的啟始記憶體位置
由此可知,main function 也是有其啟始記憶體位置。
而 function pointer 的宣告跟使用 function 時所要注意的地方是相同的,有以下幾點必須注意:
以下直接用一個簡單範例來說明 function pointer 的使用:
而名稱不同,卻不影響 function pointer 的使用,因為我們所用的是 function 的啟始記憶體位置
而 function pointer 的使用,有一點相當重要,即是 function pointer 的宣告;而 function pointer 的宣告,即是要注意到「回傳值型態」、「參數數量」、「參數型態」這三個部分。
當 function pointer 的宣告完成後,另外一個需要注意的就是每個 function 的啟始記憶體位置;而每個function 的啟始記憶體位置,即為 function 的名稱。
在程式中,就是透過將 function pointer 指向不同 function 的啟始記憶體位置,來執行不同的 function。
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。
沒有留言:
張貼留言