函數指針(整理)

函數指針

   函數指針指向的是函數而非對象。和其他指針一樣,函數指針指向某種特定類型。函數的類型由它的返回值和形參共同決定,與函數名無關。

函數指針聲明方法:

  函數類型(*指針變量名)(形參列表)

函數類型指:函數返回值類型,"(*指針變量名)"中括號不能省,若省略則爲一個返回數據類型爲指針的函數。例如:

   bool func(string a);//函數聲明

   bool (*pf)(string a);//指針函數聲明。pf指向一個函數。該函數的形參爲string類型,返回值類型爲bool類型。

   bool *pf(string a );//pf是一個返回值爲bool指針的函數


使用函數指針

   當我們把函數名作爲一個值使用時,該函數自動轉換成指針。

   pf=func;//pf指名爲func的函數

   pf=&func;//等價的賦值語句

  

調用,下列3中調用方法等價

    bool b1=pf("hello");

    bool b2=(*)pf("hello");

    bool b3=func("hello");


在指向不同函數類型的指針之間不存在轉換規則。但可爲函數指針賦值爲nullptr或0,表示沒有指向任何一個函數。

      string::size_type=func2(string b);

      bool func3(char *);

      pf=func2//錯,返回類型不同

      pf=func3//錯, 形參類型不同

     pf=func1//對。返回類型和形參類型匹配

    pf=0;//對。pf不指向任何函數


 重載函數的指針

     使用重載函數必須明確的指出選用哪個函數。

      double f(int *);

      double f(unsigned int);

      double  (*pf1)(int *)=f//對

      void  (*pf2)(int *)=f//錯 返回類型不同

      double (*pf)(int)=f//錯





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