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




















