我只是熟悉如何将函数作为参数传递给另一个函数,以及指针/ 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)
您正在调用该函数并尝试获取其返回值的地址。由于foo
的返回类型是void
,你不能取其地址,因此错误。
使用指向函数的指针时,只使用函数的名称,而不是函数调用运算符()
:
func(foo, &x1, size);
另外,这是不正确的:
vect(&x1, size);
由于&x1
有float **
类型,但vect
预计它的第一个参数是float *
类型。你想要:
vect(x1, size);