C语言回调(函数指针)

来源:互联网 发布:一键转发朋友圈 源码 编辑:程序博客网 时间:2024/06/11 11:31

    回调的概念在面向对象的语言中用的很广泛,如Java中的接口、objective-c中的delegate和block。相对正常的函数调用,如A调B,在B执行完后会有返回值给A,回调通常没有返回值,而是B中被调用函数执行到某个步骤后,调用A中的某个方法,并传递相应的参数。  在C语言中,虽然没有对象的概念,但控制函数的运行逻辑,也可以使用回调。

    

    函数指针定义的形式:返回值类型 (*指针变量名)(形参1,形参2)

typedef void (*sayInt)(int val);void realSay(int val){        printf("%d", val);}void nowSay(int value, sayInt aFun){    aFun(value);}

    具体的调用

 nowSay(5, realSay);   //结果:5

    对比这种形式,发现objective-c的block和C的函数指针回调很相似。

typedef void(^blockSay)(int val);- (void)bNowSay:(int)value completion:(blockSay)sBlock{    sBlock(value);}

    实际的调用

    [self bNowSay:5 completion:^(int val){        NSLog(@"%d", val);  //结果5,相当于C语言中的realSay()    }];


0 0