动态调用:
根据用户(程序员)的输入,调用相应的函数。与一般的调用函数不同的是,它可以动态的调用,动态体现在想更换调用函数时,可以很轻松的更换,只需改函数名的字符串就行。这种动态调用的方法,在代码很多时,使用非常便利。
具体实现步骤:
1.定义一个结构体类型
一般包含两个数据类型;字符(用来表示函数名);函数指针类型(表示函数)
2.定义一个结构体数组
存放你想调用的所有函数
3.定义一个函数指针类型
可以指向所有你想调用的函数
4.写一个函数 功能:给定一个字符串,返回一个对应的函数指针
5.最后构造一个函数 功能:传入参数 和字符串(函数名),调用指定函数,
实现动态调用
下面举例说明:
//定义(返回值为浮点型,包含两个浮点型参数)函数指针类型
typedef float(*PFUN)(float a,float b);//声明回调函数
float getCha(float a,float b);
float getHe(float a,float b);
float getJi(float a,float b);
float getShang(float a,float b);
PFUN getFunctionFromName(char name);
float getValue(float a,float b,char name);
//定义一个结构体
typedef struct nameFunctionFromName{
char name; //函数字符串
PFUN function; //函数名
}NameFunctionPair;
//结构体数组
NameFunctionPair list[4]={
{'-',getCha},
{'+',getHe},
{'*',getJi},
{'/',getShang}
};
//实现加减乘除函数
float getCha(float a,float b){
return a-b;
}
float getHe(float a,float b){
return a+b;
}
float getJi(float a,float b){
return a*b;
}
float getShang(float a,float b){
return a/b;
}
//给定一个字符串,返回一个函数指针
PFUN getFunctionFromName(char name){
for (int i=0; i<4; i++) {
if ( list[i].name==name ) {
return list[i].function;
}
}
return NULL;
}
//动态调用函数float getValue(float a,float b,char name){
PFUN p=getFunctionFromName(name);
return p(a,b);
}
int main(int argc, const char * argv[]) {
float a=getValue(2.0,3.0,'/');
printf("%f",a);
return 0;
}