将指针转换为浮点数或使用指针参数指向函数
我试图准确理解这行代码是什么,因为我正在学习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));