EasyC++,函數(shù)指針之一
大家好,我是梁唐。
這是EasyC++系列的第29篇,簡單聊聊函數(shù)指針。
想要追求更好閱讀體驗的同學(xué),可以點擊「閱讀原文」訪問github倉庫。
函數(shù)指針
函數(shù)指針顧名思義,就是指向函數(shù)的指針。
和數(shù)據(jù)類似,C++當中函數(shù)也有地址,函數(shù)的地址是存儲函數(shù)機器語言代碼的內(nèi)存地址。我們可以將另外一個函數(shù)的地址作為參數(shù)傳入函數(shù),從而實現(xiàn)函數(shù)的靈活調(diào)用。
獲取函數(shù)地址
獲取函數(shù)地址的方法非常簡單,只要使用函數(shù)名(后面不跟參數(shù)和括號)即可。比如我們有一個函數(shù)叫做think,那么think()是調(diào)用函數(shù)拿到結(jié)果,而think則是獲取函數(shù)的地址。
如果我們想要將think函數(shù)當做參數(shù)傳入另外一個函數(shù),我們可以這么寫:
- func(think);
聲明函數(shù)指針
聲明函數(shù)指針和聲明函數(shù)類似,我們聲明一個函數(shù)可以這么寫:
- double process(int);
而我們聲明函數(shù)指針則可以寫成這樣:
- double (*pt)(int);
如果我們把(*pt)替換成函數(shù)名的話,這其實就是一個函數(shù)的聲明。如果(*pt)是函數(shù)的話,那么pt自然就是指向函數(shù)的指針了。
函數(shù)指針傳參
如果我們要實現(xiàn)一個函數(shù),它的一個參數(shù)是一個函數(shù)指針,它的寫法和剛才一樣:
- double func(double x, double (*pt)(int));
在這個聲明當中,它的第二個參數(shù)是一個函數(shù)指針。指向的函數(shù)接收一個int參數(shù),返回一個double結(jié)果。
調(diào)用函數(shù)
最后, 我們來看下通過指針調(diào)用函數(shù)的部分。
其實也非常簡單,因為我們前面說了(*pt)的效果和函數(shù)是一樣的,我們之前通過函數(shù)名調(diào)用函數(shù),那么我們只需要改成通過(*pt)調(diào)用即可。
如:
- double process(int);
- double (*pt)(int);
- pt = process;
- cout << (*pt)(5) << endl;
本文轉(zhuǎn)載自微信公眾號「Coder梁」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Coder梁公眾號。



















