函数动态调用 研究

动态调用:

            根据用户(程序员)的输入,调用相应的函数。与一般的调用函数不同的是,它可以动态的调用,动态体现在想更换调用函数时,可以很轻松的更换,只需改函数名的字符串就行。这种动态调用的方法,在代码很多时,使用非常便利。


具体实现步骤:

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值