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

      有些时候我们无法及时确定函数的处理逻辑,程序需要动态的改变,这时我们可以通过定义函数指针来实现。
       举个��,我们有加法,乘法两个函数,如果还要一个除法我们怎么做,可能我们会想到,这好办,创建一个除法的函数,分分钟搞定。如果客户还要变怎么办?数据还是那些数据,只是函数的功能改变了。那有点太麻烦了。我们定义一个中间函数,其他函数作为指针参数传递进来,这样就可进行动态的处理了。
       
#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值