将函数传递给函数时,错误左值需要作为一元“&”操作数

Error lvalue required as unary '&' operand, when passing function to a function

我刚刚开始熟悉如何将函数作为参数传递给另一个函数,以及 pointers/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

谁能分享他对为什么会这样的见解?

当你这样做时:

&foo(&x1, size)

您正在调用 函数并试图获取其return 值的地址。由于 foo 的 return 类型是 void,你不能获取它的地址,因此错误。

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

func(foo, &x1, size);

此外,这是不正确的:

vect(&x1, size);

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

vect(x1, size);