用函数指针变量作函数的参数

       有些时候咱们没法及时肯定函数的处理逻辑,程序须要动态的改变,这时咱们能够经过定义函数指针来实现。
       举个🌰,咱们有加法,乘法两个函数,若是还要一个除法咱们怎么作,可能咱们会想到,这好办,建立一个除法的函数,分分钟搞定。若是客户还要变怎么办?数据仍是那些数据,只是函数的功能改变了。那有点太麻烦了。咱们定义一个中间函数,其余函数做为指针参数传递进来,这样就可进行动态的处理了。
      
#import <Foundation/Foundation.h>

//加法
int sum(int val)
{
    return val+val;
    //NSLog(@"%d",val+val);
}//over sum

//乘法
int chengfa(int val)
{
    return val*val;
    //NSLog(@"%d",val*val);

}//chengfa over

//中间体
void map(int data,int(*fn)())
{
    int* p=&data;
    NSLog(@"%d, ",(*fn)(*p));

}//map over


//main
int main(int argc, const char * argv[]) {
    @autoreleasepool {//这里会自动释放,相似c#中的using,
        int data=20;
        NSLog(@"执行加法:");
        map(data,sum);
        
        NSLog(@"执行乘法");
        map(data,chengfa);
        // insert code here...
        //NSLog(@"Hello, World!");
    }
    return 0;
    
    
}//mainOver
----------------结果--------
2017-04-24 21:15:38.204146+0800 zhizhenLianxi[1601:141357] 执行加法:
2017-04-24 21:15:38.204358+0800 zhizhenLianxi[1601:141357] 40,
2017-04-24 21:15:38.204412+0800 zhizhenLianxi[1601:141357] 执行乘法
2017-04-24 21:15:38.204429+0800 zhizhenLianxi[1601:141357] 400,
Program ended with exit code: 0
-------------------------------
若是咱们要增长除法功能,只须要添加一个除法的函数便可
int chufa(int val)
{
    return val/val;
    //NSLog(@"%d",val/val);

}//chengfa over
----------结果-----
2017-04-24 21:35:46.236714+0800 zhizhenLianxi[1645:159476] 执行除法
2017-04-24 21:35:46.236742+0800 zhizhenLianxi[1645:159476] 1
相关文章
相关标签/搜索