函數指針的理解與使用

馬上研三,面臨着找工作,心血來潮,在學堂在線網站上覆習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);    //計算兩者之和

}

        這個例子很好的說明了函數指針實現函數回調的使用,包括函數指針作爲形參的定義、包含函數指針的函數的調用。值得認真體會。

        從這個例子也可以看出函數指針還是挺有用的,可以讓代碼邏輯更清楚、有條理。但是也有一點問題,增加了函數調用,增加了程序調試時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章