【问题标题】:Error lvalue required as unary '&' operand, when passing function to a function将函数传递给函数时,需要作为一元“&”操作数的错误左值
【发布时间】:2019-04-23 17:00:59
【问题描述】:

我刚刚熟悉如何将函数作为参数传递给另一个函数,以及指针/C 整体。

我有以下函数需要另一个函数:

void func(void (*vect) (float *, float), float *x1, float size)
{
    vect(&x1, size);
    // other instructions
}

foo 是这样定义的(foo 是我传递给函数的vect):

void foo(float *x1, float size)
{
    //
}

这就是我使用函数func的方式

func(&foo(&x1, size), &x1, size);

由于某种原因,我收到以下错误:

error: lvalue required as unary '&' operand

有人能分享他对为什么会发生这种情况的见解吗?

【问题讨论】:

    标签: c function pointers function-pointers lvalue


    【解决方案1】:

    当你这样做时:

    &foo(&x1, size)
    

    您正在调用该函数并尝试获取其返回值的地址。由于foo的返回类型是void,所以取不到它的地址,所以报错。

    使用指向函数的指针时,只使用函数名,而不是函数调用运算符()

    func(foo, &x1, size);
    

    另外,这是不正确的:

    vect(&x1, size);
    

    由于&x1 的类型为float **,但vect 期望其第一个参数的类型为float *。你反而想要:

    vect(x1, size);
    

    【讨论】:

    • 这为我澄清了一切。谢谢。我会尽快接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多