【转】typedef函数指针的用法(C++)
| 代碼簡化, 促進跨平臺開發的目的. typedef 行為有點像 #define 宏,用其實際類型替代同義字。 不同點:typedef 在編譯時被解釋,因此讓編譯器來應付超越預處理器能力的文本替換。 用法一: typedef?int?(*MYFUN)(int, int); 用法二: typedef給變量類型定義一個別名. typedef?struct{ 第二種用法:typedef?原變量類型?別名 typedef補充內容: 例如: typedef int (*PF) (const char *, const char *);這個聲明引入了?PF 類型作為函數指針的同義字,該函數有兩個 const char * 類型的參數以及一個 int 類型的返回值。 簡單的函數指針的用法 //形式1:返回類型(*函數名)(參數表) char(*pFun)(int); char glFun(int a){return;} void main() { pFun =glFun; (*pFun)(2); } 第一行定義了一個指針變量pFun.它是一個指向某種函數的指針,這種函數參數是一個int類型,返回值是char類型。只有第一句我們還無法使用這個指針,因為我們還未對它進行賦值。 第二行定義了一個函數glFun().該函數正好是一個以int為參數返回char的函數。我們要從指針的層次上理解函數-函數的函數名實際上就是一個指針,函數名指向該函數的代碼在內存中的首地址。 使用typedef更直接 typedef?char(*PTRFUN)(int) PTRFUN pFun; char glFun(int a){return;} void main() { pFun = glFun; (*pFun)(2); } typedef的功能是定義新的類型。第一句就是定義了一種PTRFUN的類型,并定義這種類型為指向某種函數的指針,這種函數以一個int為參數并返回char類型。 // 下面是個例子: // 在typedef的使用中,最麻煩的是指向函數的指針,如果沒有下面的函數,你知道下面這個表達式的定義以及如何使用它嗎? ? int (*s_calc_func(char op))(int, int);
?
int add(int, int); int sub(int, int); int mul(int, int); int div(int, int); // 定義指向這類函數的指針 typedef int (*FP_CALC)(int, int);
int (*s_calc_func(char op))(int, int);
// 定義一個函數calc_func,它根據操作字符 op 返回指向相應的計算函數的指針 FP_CALC calc_func(char op);
int calc(int a, int b, char op);
{ ????return a + b; } int sub(int a, int b) { ????return a - b; } int mul(int a, int b) { ????return a * b; } int div(int a, int b) { ????return b? a/b : -1; } // 這個函數的用途與下一個函數作業和調用方式的完全相同, // 參數為op,而不是最后的兩個整形 int (*s_calc_func(char op)) (int, int) { ????return calc_func(op); }
{ ????switch (op) ????{ ????case '+': return add; ????case '-': return sub; ????case '*': return mul; ????case '/': return div; ????default: ????????return NULL; ????} ????return NULL; }
{ ???? FP_CALC fp = calc_func(op); // 下面是類似的直接定義指向函數指針變量 ???????// 下面這行是不用typedef,來實現指向函數的指針的例子,麻煩! ????????int (*s_fp)(int, int) = s_calc_func(op); ????????// ASSERT(fp == s_fp); // 可以斷言這倆是相等的 ???? if (fp) return fp(a, b); ???? else return -1; }
{ ????int a = 100, b = 20; ????printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+')); ????printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-')); ????printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*')); ????printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/')); }
???calc(100, 20, +) = 120 ???calc(100, 20, -) = 80 ???calc(100, 20, *) = 2000 ???calc(100, 20, /) = 5 |
轉載于:https://www.cnblogs.com/kegeyang/archive/2012/03/24/2415097.html
總結
以上是生活随笔為你收集整理的【转】typedef函数指针的用法(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快排函数的使用语法
- 下一篇: Windows常用软件列表(2012.0