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