typedef使用大全3(指向函式的指標) (轉)
在typedef的使用中,最麻煩的是指向的指標,如果沒有下面的函式,你知道下面這個的定義以及如何使用它嗎?
int (*s_calc_func(char op))(int, int);:namespace prefix = o ns = "urn:schemas--com::office" />
如果不知道,請看下面的,裡面有比較詳細的說明
// 定義四個函式
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);
// 根據 op 返回相應的計算結果值
int calc(int a, int b, char op);
int add(int a, int b)
{
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);
}
FP_CALC calc_func(char op)
{
switch (op)
{
case '+': return add;
case '-': return sub;
case '*': return mul;
case '/': return div;
default:
return NULL;
}
return NULL;
}
int calc(int a, int b, char op)
{
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;
}
void test_fun()
{
int a = 100, b = 20;
printf("calc(%d, %d, %c) = %d ", a, b, '+', calc(a, b, '+'));
printf("calc(%d, %d, %c) = %d ", a, b, '-', calc(a, b, '-'));
printf("calc(%d, %d, %c) = %d ", a, b, '*', calc(a, b, '*'));
printf("calc(%d, %d, %c) = %d ", a, b, '/', calc(a, b, '/'));
}
執行結果
calc(100, 20, +) = 120
calc(100, 20, -) = 80
calc(100, 20, *) = 2000
calc(100, 20, /) = 5
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958239/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- typedef void (*Fun) (void) 的理解——函式指標——typedef函式指標函式指標
- 指向函式的指標函式指標
- C/C++——指向函式的指標和指向函式的指標的陣列C++函式指標陣列
- C/C++—— 寫一個函式,它的引數為指向函式的指標,返回型別也為指向函式的指標C++函式指標型別
- typedef使用大全1(陣列) (轉)陣列
- 指標函式 和 函式指標指標函式
- 指向指標的指標指標
- 函式指標淺談 (轉)函式指標
- C#中的函式指標 (轉)C#函式指標
- 【不在混淆的C】指標函式、函式指標、回撥函式指標函式
- 指標問題的一點體會(區別 [指向指標的指標] 與 [指標的指標] .) (轉)指標
- 函式指標函式指標
- 指向陣列的指標陣列指標
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- [C++] 成員函式指標和函式指標C++函式指標
- 如何使用成員函式指標函式指標
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 指向常量資料的指標和常量指標指標
- 如何理解指向指標的指標?指標
- 函式指標使用c++類成員函式函式指標C++
- 函式指標之回撥函式和轉移表函式指標
- 函式名/函式地址/函式指標函式指標
- 宣告與函式、函式指標函式指標
- (轉發)連結串列新增函式中為什麼要用指向連結串列指標的指標(引用傳參)函式指標
- 函式指標呼叫函式指標
- 指向const物件的指標 和 const指標物件指標
- YTU-OJ-Problem J: B3 指向基類的指標訪問派生類的成員函式指標函式
- 【CSS: cursor】滑鼠游標指標樣式大全CSS指標
- Rust中的函式指標Rust函式指標
- cpp:"函式指標"的方法函式指標
- C/C++指向指標的指標C++指標
- ORACLE函式大全(轉)Oracle函式
- C語言rewind()函式:將檔案指標重新指向檔案開頭C語言函式指標
- 函式指標&回撥函式Callback函式指標
- 使用bind()函式的產生的函式用作建構函式this的指向函式
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- 陣列指標:a pointer to an array,即指向陣列的指標陣列指標
- c++ 函式指標C++函式指標