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

问题描述 投票:2回答:1

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

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

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

这就是如何定义foofoo是我传递给函数的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个回答
6
投票

当你这样做:

&foo(&x1, size)

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

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

func(foo, &x1, size);

另外,这是不正确的:

vect(&x1, size);

由于&x1float **类型,但vect预计它的第一个参数是float *类型。你想要:

vect(x1, size);
© www.soinside.com 2019 - 2024. All rights reserved.