将指针转换为浮点数或使用指针参数指向函数

我试图准确理解这行代码是什么,因为我正在学习C.

int (*f) (float *) 

我知道第一部分是指向名为f的int的指针,但第二部分是我不确定的。

这会被归类为指向名为f的int的指针,该指针被强制转换为指向浮点数的指针

要么

这是一个名为f的指针,指向带有指针参数的函数。

如果有人可以帮助并且可能解释为什么或两者之间的差异,因为我在理解这个概念时遇到一点麻烦,那将会很棒。

谢谢!

该行声明f为指向函数的指针,该函数接受float *作为其参数并返回int

声明似乎很棘手,但它只是遵循C的规则。如果我们写的

 int *f(float *); 

然后看起来好像f是一个返回int *的函数。 因此,必须使用*f周围的括号强制使用正确的优先级。

下面是如何定义f ,分配函数指针然后调用的示例

 #include  int foo(float *real) { float num = *real + 0.5F; return (int)num; } int main(void) { float number = 4.9F; int (*f) (float *) = foo; // define f printf("%d\n", f(&number)); // calls f return 0; } 

节目输出:

 5 

如果您有声明:

 int foo(float *); 

很明显,这是一个function定义。 使用(*f)而不是foo为您提供指向函数的指针。

它将f声明为一个指向函数的指针,该函数采用float *float指针 )并返回int 。 然后你可以像这样使用它

 float array[5] = {1.0, 2.0, 3.0, 4.0, 5.0}; printf("%d\n", f(array));