二十、函数指针高级(动态调用)

1.动态调用是系统普遍支持的技术
2.要实现动态调用需要一个对应表
3.示例:使用函数名的字符表调用函数
函数名  函数指针
“max”   maxValue
“min”    minValue
“avg”    avgValue
4.动态调用
PFUN getFunctionFromName(char *name);
int getValue(int a , int b , char *name);
5.示例:
typedef int(*PFUN)(int , int);
//相当于把int (*)(int , int)改成PFUN
int sum(int a , int b );
int sum(int a , int b ){//加法函数
     return a+b;
}
int maxValue(int x , int y);
int maxValue(int x , int y){//最大值函数
     return x>y?x:y;
}
int minus(int x , int y);
int minus(int x , int y){//减法函数
     return x-y;
}
 
typedef struct nameFunctionPair{//定义结构体
     char name[20];
     PFUN function;
}NameFunctionPair;
 
NameFunctionPair nfs[3] = {//定义一个全局变量的结构体数组
     {“max” , maxValue},{“sum” , sum},{“minus” , minus}
};
 
PFUN getFunctionWithName(char *name);
PFUN getFunctionWithName(char *name){//通过名字获取该名字对应的函数体的功能
     for(int i = 0 ; i < 3 ; i ++){
          if(strcmp(nfs[i].name , name) == 0){
               return nap[i].function;
          }
     }
     return maxValue;
}
 
int getValue(int x , int y , char *functionName);
int getValue(int x , int y , char *functionName){//获取函数
     PFUN p = getFunctionWithName(functionName);
     return p(x,y)
}
 
int main(){
      int a = getValue(10,20,”sum”);//在程序使用过程中,使用字符串是最方便的
      printf(“a=%d\n”,a);   
}

你可能感兴趣的:(二十、函数指针高级(动态调用))