有些時候我們無法及時確定函數的處理邏輯,程序需要動態的改變,這時我們可以通過定義函數指針來實現。
舉個,我們有加法,乘法兩個函數,如果還要一個除法我們怎麼做,可能我們會想到,這好辦,創建一個除法的函數,分分鐘搞定。如果客戶還要變怎麼辦?數據還是那些數據,只是函數的功能改變了。那有點太麻煩了。我們定義一箇中間函數,其他函數作爲指針參數傳遞進來,這樣就可進行動態的處理了。
#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