如何为函数指定函数指针

时间:2017-04-04 21:56:54

标签: c function pointers function-pointers

我有这个程序而且我得到了:

  

左值作为赋值的左操作数

因为行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_a中将function_b设置为set_a。所以我期待输出12, 2。我该怎么做才能妥善分配?

1 个答案:

答案 0 :(得分: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;
}