2017-04-04 46 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; 
}