我想确切了解这行代码是,因为我学习C.铸造一个指向浮动或指向一个函数指针参数
int (*f) (float *)
我知道,第一部分是一个指向名为f的int的指针,但第二部分是我不确定的。
这会被归类为指向int名为f的被转换为指针到浮子
或
这将是一个指针名为f的,指向一个函数的指针参数。
如果有人能够帮助,并可能解释为什么或两者之间的差异,因为我在理解这个概念时有点麻烦,那将会很棒。
谢谢!
我想确切了解这行代码是,因为我学习C.铸造一个指向浮动或指向一个函数指针参数
int (*f) (float *)
我知道,第一部分是一个指向名为f的int的指针,但第二部分是我不确定的。
这会被归类为指向int名为f的被转换为指针到浮子
或
这将是一个指针名为f的,指向一个函数的指针参数。
如果有人能够帮助,并可能解释为什么或两者之间的差异,因为我在理解这个概念时有点麻烦,那将会很棒。
谢谢!
它声明f
作为一个指针指向一个函数采取float *
(一个float
指针)以及返回int
。然后,您可以使用它像这样
float array[5] = {1.0, 2.0, 3.0, 4.0, 5.0};
printf("%d\n", f(array));
'3.5'不是'float *'。 – mch
该行声明f
为指针的函数接受float *
作为它的参数和返回一个int
。
声明似乎棘手,但它仅仅是跟随C的规则。如果我们写
int *f(float *);
然后,它看起来就像是f
返回int *
功能。因此,正确的优先级必须在*f
左右使用圆括号。
好极了,那么这是否意味着指针'f'只会接受'float *'而没有别的? – madhaj1
如果你有声明:
int foo(float *);
这将是明显的,这是一个函数定义。使用(*f)
而不是foo
可以给你一个指向函数的指针。
下面是如何f
被定义,被分配一个函数指针,然后叫
#include <stdio.h>
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
我回答了这个问题,但是如果没有指针参数“* real”(我没有很好地使用它),它会更清晰,给出一个比说明函数指针。 –
http://cdecl.org/ – user3528438
的可能的复制[解释C代码的工具](http://stackoverflow.com/questions/667362/tool-to-explain-c-code) – usr2564301