如何为函数指定函数指针

Pet*_*etr 2 c pointers function-pointers function

我有这个程序,我得到了:

左值作为赋值的左操作数

因为这条线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);
}
Run Code Online (Sandbox Code Playgroud)

我想设置function_afunction_b功能set_a.所以我期待输出12, 2.我该怎么做才能妥善分配?

Ste*_*ner 6

函数定义不能被赋值替换,即函数定义不是可以赋值的左值,这就是你得到错误的原因; 但是你可以定义一个函数指针并分配不同的函数定义,并调用函数指针,就好像它是普通函数定义意义上的函数一样:

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;
}
Run Code Online (Sandbox Code Playgroud)