- 函數指標宣告
int (*pt2Function1)(int) = NULL; int (*pt2Function2)(int, char) __reentrant = NULL; 當函數指標裏的參數超過一個時,就必須宣告成可再入函數型態(__reentrant),否則會出現 Functions called via pointers must be 'reentrant' to take this many arguments 的錯誤。
- 函數指標 typedef
typedef int (*pt2func)(int, char) __reentrant; pt2func pt2Function1 = NULL; int (*pt2Function2)(int, char) __reentrant = NULL; pt2Function1 跟 pt2Function2 二者宣告的結果是一樣,而 pt2Function1 看起來更容易理解,也更像一般的變數。
- 函數指標設定給值
int DoIt (int a) { printf("DoIt\n"); return a; } int DoMore(int a, char b) __reentrant { printf("DoMore\n"); return a-b; } pt2Function1 = DoIt; // 簡單表示法 pt2Function2 = &DoMore; // 正規表示法 當指標函數宣告成 __reentrant 型態,其相對應的函數也要宣告成 __reentrant,否則會造成二者參數傳遞出問題,這個 bug 編輯器可是不會顯示警告的。
- 函數指標比較
if(pt2Function1 > 0) { // check if initialized if(pt2Function1 == &DoIt) printf("Pointer points to DoIt\n"); } else printf("Pointer not initialized!!\n"); - 函數指標執行
int result1 = pt2Function1 (12); // 簡單表示法 int result2 = (*pt2Function2)(12, 'a'); // 正規表示法
張貼留言