幾分鐘教您玩轉(zhuǎn)C++中函數(shù)指針
所謂的C++函數(shù)指針,函數(shù)指針是指向函數(shù)的指針變量函數(shù)指針有兩個用途:調(diào)用函數(shù)和做函數(shù)的參數(shù),下面詳細解讀C++函數(shù)指針的說明方法。
由第一個字節(jié)(buffer[0])標識該數(shù)據(jù)的類型,共有256(28 )種可能性。我的任務是必須對每一種可能出現(xiàn)的數(shù)據(jù)類型都要作處理,并且我的模塊包含若干個函數(shù),在每個函數(shù)里面都要作類似的處理。若按通常做法,會寫出如下代碼:
- void MyFuntion( char* buffer, int length )
- {
- __int8 nStreamType = buffer[0];
- switch( nStreamType )
- {
- case 0:
- function1();
- break;
- case 1:
- ......
- case 255:
- function255();
- break;
- }
- }
如果按照這種方法寫下去,那么在我的每一個函數(shù)里面,都必須作如此多的判斷,寫出的代碼肯定很長,并且每一次處理,都要作許多次判斷之后才找到正確的處理函數(shù),代碼的執(zhí)行效率也不高。針對上述問題,我想到了用C++函數(shù)指針數(shù)組的方法解決這個問題。
函數(shù)指針的概念,在潭浩強先生的C++語言程序設計這本經(jīng)典的教程中提及過,在大多數(shù)情況下我們使用不到,也忽略了它的存在。函數(shù)名實際上也是一種指針,指向函數(shù)的入口地址,但它又不同于普通的如int*、double*指針,看下面的例子來理解C++函數(shù)指針的概念:
- 1 int funtion( int x, int y );
- 2 void main ( void )
- {
- 3 int (*fun) ( int x, int y );
- 4 int a = 10, b = 20;
- 5 function( a, b );
- 6 fun = function;
- 7 ?。?fun)( a, b );
- 8 ……
- }
語句1定義了一個函數(shù)function,其輸入為兩個整型數(shù),返回也為一個整型數(shù)(輸入?yún)?shù)和返回值可為其它任何數(shù)據(jù)類型);語句3定義了一個函數(shù)指針,與int*或double*定義指針不同的是,C++函數(shù)指針的定義必須同時指出輸入?yún)?shù),表明這是一個函數(shù)指針,并且*fun也必須用一對括號括起來;
【編輯推薦】