用函數指針變量做函數的參數

     有些時候我們無法及時確定函數的處理邏輯,程序需要動態的改變,這時我們可以通過定義函數指針來實現。

       舉個,我們有加法,乘法兩個函數,如果還要一個除法我們怎麼做,可能我們會想到,這好辦,創建一個除法的函數,分分鐘搞定。如果客戶還要變怎麼辦?數據還是那些數據,只是函數的功能改變了。那有點太麻煩了。我們定義一箇中間函數,其他函數作爲指針參數傳遞進來,這樣就可進行動態的處理了。

#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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章