大家好,我是梁唐。
這是EasyC++系列的第29篇,來聊聊函式指標。
想要追求更好閱讀體驗的同學,可以訪問github倉庫:EasyLeetCode。
函式指標
函式指標顧名思義,就是指向函式的指標。
和資料類似,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;