如何将函数指针分配给一个函数

3
我有一个程序,出现了以下错误:

需要lvalue作为赋值运算符的左操作数

因为这一行代码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);
}

我想在函数set_a中将function_a设置为function_b。因此,我期望输出结果为12, 2。我应该如何正确地赋值?


1
你在解决问题方面到目前为止做了什么? - Manav Dubey
1
@narusin 真糟糕,它不让我踩这条评论 :-( - George
1个回答

7

函数定义不能被赋值取代,也就是说函数定义不是可以赋值的左值,这就是为什么会出错的原因;但你可以定义一个函数指针并赋予不同的函数定义,然后调用函数指针,就像普通函数定义中一样调用函数:

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接