我只是熟悉如何将函数作为参数传递给另一个函数,以及整个指针/ 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
会有人分享他的见解为何发生的原因吗?
答案 0 :(得分:6)
执行此操作时:
&foo(&x1, size)
您正在调用函数,并尝试获取其返回值的地址。由于foo
的返回类型为void
,因此您无法获取其地址,因此会出现错误。
使用指向函数的指针时,请使用 just 函数名称,而不要使用函数调用运算符()
:
func(foo, &x1, size);
此外,这是不正确的:
vect(&x1, size);
由于&x1
的类型为float **
,但是vect
期望其第一个参数的类型为float *
。相反,您想要:
vect(x1, size);