函數指針:指向函數的指針
定義方法爲
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};
- 例子:
- #import <Foundation/Foundation.h>
- double (*oper_func[])(double, double) = {
- add,sub,mul,div1
- };
- int main(int argc, const char * argv[])
- {
- int oper = 0;
- int op1 = 5;
- int op2 = 8;
- int result = oper_func[oper](op1,op2);
- printf("%d",result);
- return 0;
- }
- double add(double a,double b)
- {
- return a + b;
- }
- double sub(double a,double b)
- {
- return a - b;
- }
- double mul(double a,double b)
- {
- return a * b;
- }
- double div1(double a,double b)
- {
- return a/b;
- }