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);
}