函数指针与回调函数

回调函数是函数指针的一个重要用法:

因此先解释一下函数指针,

函数指针:声明 int (*fun)() 或者int* (*func)() 。

()的优先级比*的高,如果不加括号便是指针函数。表示返回的值是一个指针。

typedef enum
{
    ADD = 1,
    SUB,
    MUL,
    DIV
} baseAlg_e;

int add(int a, int b)
{
    return a+b;
}

int substract(int a, int b)
{
    return a-b;
}

int muliply(int a, int b)
{
    return a*b;
}

int divide(int a, int b)
{
    if (b != 0)
    {
        return (int)a/b;
    }
    else
    {
        return -1;
    }
}

/*声明一个callback函数*/
int (*callback1)(int, int);

typedef int (*callback2)(int, int);

/*写法1*/
callback2 callback2Msg;

void register_fun(uint8_t type)
{

    switch (type)
    {
    case ADD:
        callback2Msg = &add;
        break;
    case SUB:
        callback2Msg = &substract;
        break;
    case MUL:
        callback2Msg = &muliply;
        break;
    case DIV:
        callback2Msg = ÷
        break;
    default:
        break;
    }
}

/*写法2*/
callback2 callbackComponent[4];

void register_fun1(int type, callback2 testcall)
{
    callbackComponent[type] = testcall;
}


int main()
{
    /*方法1*/
    callback1 = &add;
    int c = callback1(1,2);
    printf("callback 1 is %d", c);

    /*方法2*/
    callback2 b;
    b = &substract;
    int d = b(3,3);
    printf("callback 2 is %d", d);



    /*问题1:如果原来得函数的类型都不一致怎么办?*/
    /*方法1的注册*/
    register_fun(ADD);

    /*方法1的调用*/
    int f = callback2Msg(2,3);
    printf("method 3 is %d \n", f);

    /*方法2的注册*/
    register_fun1(ADD, &add);

    /*调用*/
    int c1 = callbackComponent[ADD](4,5);
    printf("method 4 is %d \n", c1);



    return 0;
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值