馬上研三,面臨着找工作,心血來潮,在學堂在線網站上覆習C++語法課,希望把以前沒搞懂的一些知識點弄懂了。
以後可能會陸續更新一些難啃點的使用理解。
函數指針:
定義:函數指針指向存放代碼段的首地址;
定義形式:存儲類型 返回值類型 (*函數指針名) ();
值得注意的與指針類型的函數的區別:
指針類型的函數:函數返回值是指針。定義形式:存儲類型 返回值類型 * 函數指針名();
重點(敲黑板):
典型用途:實現函數回調。
理解:
A、通過函數指針調用函數。將函數的指針作爲參數傳遞給一個函數,使得在處理相似的事件的時候可以靈活的使用不同的方法;
B、調用者不關心誰是調用者。即需要知道存在一個具有特定原型和限制條件的被調用函數。(個人感覺,這一條是最實用的)
具體怎麼來理解函數指針的用途呢?這裏就必須要貼上案例了。
問題描述:編寫一個計算函數compute,對兩個整數進行各種計算。要求:
1)有一個形參爲指向具體算法函數的指針,根據不同的實參函數,用不同的算法進行計算。
2)編寫三個函數:求兩個整數的最大值、最小值、和。分別用這三個函數作爲實參,測試compute函數
代碼:
#include <iostream>
using namespace std;
int compute(int a, int b, int (*func) (int , int))
{ return func(a,b); }
int max (int a, int b) //計算最大值
{ return ( (a>b)? a: b); }
int min( int a, int b) //計算最小值
{ return a<b? a: b; }
int sum(int a, int b) //計算和
{ return a+b;}
int main()
{
int a, b, res;
cout<<“請輸入整數a:”; cin>>a;
cout<<"請輸入整數b: "; cin>>b;
res=compute(a, b, &max); //計算兩者較大值
res=compute(a, b, &min); //計算兩者較小值
res=compute(a, b, &sum); //計算兩者之和
}
這個例子很好的說明了函數指針實現函數回調的使用,包括函數指針作爲形參的定義、包含函數指針的函數的調用。值得認真體會。
從這個例子也可以看出函數指針還是挺有用的,可以讓代碼邏輯更清楚、有條理。但是也有一點問題,增加了函數調用,增加了程序調試時間。