EasyC++29,函式指標

大家好,我是梁唐。

這是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;