2017-04-04 45 views
1

我有這個計劃,我越來越:因由於線路function_a = function分配如何函數指針賦值給一個函數

的左操作數

左值。

int function_a(int j){ 
    return j+10; 
} 

int function_b(int j){ 
    return j; 
} 

void set_a(int (*function)(int)){ 
    function_a = function; 
} 

int main(){ 
    int a = function_a(2); 
    printf("%d, ", a); 

    set_a(function_b); 

    int b = function_a(2); 
    printf("%d", b); 
} 

我想設置function_afunction_b在功能set_a。所以我期待輸出12, 2。我應該怎麼做才能恰當地分配這個?

+1

你有什麼試圖解決這樣做的遠你的問題? –

+1

@narusin該死的,它不會讓我失望評論:-( – George

回答

4

函數定義不能被賦值替換,即函數定義不是可以賦值的左值,這就是爲什麼你會得到錯誤;但是,你可以定義一個函數指針,並分配不同的功能定義,並調用函數指針,就好像它是一個普通函數定義的意義上的功能:

int function_a(int j){ 
    return j+10; 
} 

int function_b(int j){ 
    return j; 
} 

int (*f)(int) = function_a; 

void set_a(int (*function)(int)){ 
    f = function; 
} 


int main(int argc, const char *argv[]) 
{ 

    int a = f(2); 
    printf("%d, ", a); 

    set_a(function_b); 

    int b = f(2); 
    printf("%d", b); 

    return 0; 
}