[摘要]本文是對用函數指針變量做函數的參數的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。
有些時候我們無法及時確定函數的處理邏輯,程序需要動態的改變,這時我們可以通過定義函數指針來實現。
舉個🌰,我們有加法,乘法兩個函數,如果還要一個除法我們怎麼做,可能我們會想到,這好辦,創建一個除法的函數,分分鐘搞定。如果客戶還要變怎麼辦?數據還是那些數據,只是函數的功能改變了。那有點太麻煩了。我們定義一個中間函數,其他函數作為指針參數傳遞進來,這樣就可進行動態的處理了。
#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