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

       有些時候咱們沒法及時肯定函數的處理邏輯,程序須要動態的改變,這時咱們能夠經過定義函數指針來實現。
       舉個🌰,咱們有加法,乘法兩個函數,若是還要一個除法咱們怎麼作,可能咱們會想到,這好辦,建立一個除法的函數,分分鐘搞定。若是客戶還要變怎麼辦?數據仍是那些數據,只是函數的功能改變了。那有點太麻煩了。咱們定義一箇中間函數,其餘函數做爲指針參數傳遞進來,這樣就可進行動態的處理了。
      
#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
相關文章
相關標籤/搜索