2010年9月17日 星期五

[C++ 小學堂] C++ 函數與指針 : 指向函數的指針

函數是一組代碼的封裝, 這組代碼在內存占有一片存儲空間, 該空間的起始位置是以存放以函數名為名的單元. 換言之, 函數名就是指向函數的指針. 這有點類似數組名是指向數組空間的常指針. 

1. 函數指針的聲明與初始化 
可以聲明一個指針指向一個函數, 稱為指向函數的指針, 形式如下: 
返回類型 (* 指針名) (參數列表); 

這樣便可以用該指針間接調用函數, 如下所示: 
int (*Compare)(const char*, const char*); 

上述代碼聲明一個名為Compare的函數指針以保存某些函數的地址, 例如可使用Compare指向C++標準函數庫的字串比較函數strcmp. 

  1. Compare = &strcmp;  
  2. Compare = strcmp;  


以上兩種的Compare初始化都是正確的, 函數名strcmp可以看做是指向函數的常指針, 此外還可以在聲明函數指針同時對其初始化, 如下: 
int (*Compare)(const char*, const char*) = strcmp; 
範例代碼: 

  1. #include   
  2. #include   
  3.   
  4. using namespace std;  
  5. int main(){  
  6.   char sz1[] = "Hello,C++";  
  7.   char sz2[] = "Hello";  
  8.   int (*pF)(const char*,const char*);  
  9.   pF = strcmp;  
  10.   int result = pF(sz1,sz2);  
  11.   if(result=0){  
  12.     cout << "字串相等" << endl;  
  13.   }else{  
  14.     cout << "字串不相等" << endl;  
  15.   }     
  16. }  

Ps. 函數指針不支持算數運算, 對函數指針加減操作是沒有意義的.

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...