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

wen*_*eno 2 c pointers function-pointers function lvalue

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

我有以下功能需要另一个功能:

void func(void (*vect) (float *, float), float *x1, float size)
{
    vect(&x1, size);
    // other instructions
}
Run Code Online (Sandbox Code Playgroud)

这是foo定义的方式(foovect我传递给函数的方式):

void foo(float *x1, float size)
{
    //
}
Run Code Online (Sandbox Code Playgroud)

这就是我使用该功能的方式 func

func(&foo(&x1, size), &x1, size);
Run Code Online (Sandbox Code Playgroud)

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

error: lvalue required as unary '&' operand

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

dbu*_*ush 6

执行此操作时:

&foo(&x1, size)
Run Code Online (Sandbox Code Playgroud)

您正在调用该函数,并尝试获取其返回值的地址。由于返回类型foovoid,因此您无法获取其地址,因此会出现错误。

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

func(foo, &x1, size);
Run Code Online (Sandbox Code Playgroud)

另外,这是不正确的:

vect(&x1, size);
Run Code Online (Sandbox Code Playgroud)

既然&x1具有type,float **vect期望其第一个参数为type float *。相反,您想要:

vect(x1, size);
Run Code Online (Sandbox Code Playgroud)