函數指針與函數指針數組的定義與使用

函數指針與函數指針數組的定義與使用


函數指針:指向函數的指針
定義方法爲


double add(double a,double b);
double sub(double a,double b);
double mul(double a,double b);
double div1(double a,double b);
double (*Func)(double,double);
參數個數,類型,返回值與所指向的函數一致,亦即這是定義了一個統配的類型。
帶函數指針的函數的定義方法:
void printf(Func *f)
{
int a = 2;
int b = 3;
printf("%f",f(a,b))
}


調用方法:
printf(add);直接調用求和函數。
printf(sub);直接調用相減函數。
這種使用有些類似與面向對象的多態:多態也是將參數作爲一種統配的類型,即爲父類,實際傳的是子類。


函數指針數組就是函數指針的數組:使用方法類似與普通的數組。只不過注意一下定義和使用方法。
定義方法如下:
double add(double a,double b);
double sub(double a,double b);
double mul(double a,double b);
double div1(double a,double b);
下面是定義方法一
double (*oper_func[])(double, double) = {


    add,sub,mul,div1
};
定義方法二,使用typedef定義。
typedef double (*oper_func[])(double, double);
這樣定義之後在其它函數裏面可以直接使用 oper_func類型:
使用方法如下:

oper_func p= {add,sub,mul,div1};


[html] view plaincopy
  1. 例子:  
  2.   
  3.   
  4. #import <Foundation/Foundation.h>  
  5.   
  6.   
  7.   
  8. double (*oper_func[])(double, double) = {  
  9.   
  10.     add,sub,mul,div1  
  11. };  
  12.   
  13. int main(int argc, const char * argv[])  
  14. {  
  15.   
  16.     int oper = 0;  
  17.     int op1 = 5;  
  18.     int op2 = 8;  
  19.     int result = oper_func[oper](op1,op2);  
  20.     printf("%d",result);  
  21.     return 0;  
  22. }  
  23.   
  24. double add(double a,double b)  
  25. {  
  26.     return a + b;  
  27. }  
  28.   
  29. double sub(double a,double b)  
  30. {  
  31.     return a - b;  
  32. }  
  33.   
  34. double mul(double a,double b)  
  35. {  
  36.   
  37.     return a * b;  
  38. }  
  39.   
  40. double div1(double a,double b)  
  41. {  
  42.     return a/b;  
  43. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章