可能在學校的學習中我們很少使用到函數指標,使用到的地方可能就是在api函數傳遞迴調函數的地方使用到了,不是很熟悉,學習總結下
1.定義:
指向某種函數類型的指標(函數類型由傳回值和形參確定)
2.格式:
函數傳回型別 (*函數指標名) (形參列表);
例如:
int (*pMax)(int a,int b);
3.賦值:
1>直接賦值:
int Max(int a, int b);int (*pMax)(int a, int b);pMax = Max;
2>取值賦值:
int Max(int a, int b);int (*pMax)(int a, int b);pMax = &Max;
4.調用
1>直接調用
int Max(int a, int b);int (*pMax)(int a, int b);void main(){ pMax = &Max; int c = pMax(5, 4); cout<<c<<endl;}
2>用解應用操作符:(解引用操作符與函數指標名必須用括弧框起來)
int Max(int a, int b);int (*pMax)(int a, int b);void main(){ pMax = &Max; int c = (*pMax)(5, 4);//注意此處解引用操作符與函數指標名必須用括弧括起 cout<<c<<endl;}
5.函數指標做形參:
格式:
傳回值 函數名(參數1,參數2,..,函數傳回值 (*函數指標名)(參數列表));
bool ChangIf(int &a, int &b, int (*pMax)(int a, int b));
6.返回函數指標:
看傳回值為函數指標的函式宣告估計要鬱悶死,但是如果我們掌握技巧並且足夠細心,那麼看懂不是問題
寫或者讀返回函數指標的函式宣告應該是由內而外
舉個例子吧:寫一個傳回值類型為max函數類型指標的函數
1>寫函數名,函數參數表
Test()
2>在函數名前加*,並用括弧將現在寫好的內容括起來(這裡的括弧是必須的)
(*Test())
3>在括弧前面寫函數指標傳回型別,在括弧後面寫函數指標參數表
int (*Test())(int a, int b);
注:
1>用typedef先定義函數指標或者函數別名,再將這個名字用來做參數或者傳回值,或者定義指標變數這樣顯得易懂些, 可以提高程式的可讀性
2>用typedef定義函數別名,在寫函數定義時這個名字可以直接用來做函數的參數,但是這個名字不能直接用來做函數傳回值