C++函數指針


一、基本語法

現有一函數如下

void foo(int a, int b)
{
    cout << a + b << endl;
}

1、直接定義函數指針

1      void (*pf)(int, int);   // 定義函數指針變量pf
2      pf = foo;               // 賦值使其指向函數foo --- (1)
3      pf = &foo;              // 賦值使其指向函數foo --- (2)
4                              // (1)與(2)均ok
5  
6      pf(6, 7);               // 通過函數指針調用函數:輸出13 --- (3)
7      (*pf)(6, 7);            // 通過函數指針調用函數:輸出13 --- (4)
8                              // (3)與(4)均ok

2、利用類型別名定義

typedef void (*FunPtr)(int, int);  // 定義函數指針類型別名
1      FunPtr pf;              // 定義函數指針變量pf
2      pf = foo;               // 賦值使其指向函數foo --- (1)
3      pf = &foo;              // 賦值使其指向函數foo --- (2)
4                              // (1)與(2)均ok
5  
6      pf(6, 7);               // 通過函數指針調用函數:輸出13 --- (3)
7      (*pf)(6, 7);            // 通過函數指針調用函數:輸出13 --- (4)
8                              // (3)與(4)均ok

二、const 函數指針

C++不支持const函數指針,我們只能定義非const函數指針變量。

以下是我在VS2010中試圖定義const函數指針變量時報的錯:

1      void (const *pf)(int, int);       // error C2143: syntax error : missing ')' before 'const'
2                                        // error C2059: syntax error : ')'

當我試圖利用typedef定義const函數指針類型時,報錯如下:

typedef void (const *FunPtr)(int, int);     // error C2059: syntax error : '<cv-qualifer>'

具體可參考如下文章:

http://stackoverflow.com/questions/1117873/pointer-to-const-vs-usual-pointer-for-functions

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM