2016-05-12 81 views
-1

我想确切了解这行代码是,因为我学习C.铸造一个指向浮动或指向一个函数指针参数

int (*f) (float *) 

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

这会被归类为指向int名为f的被转换为指针到浮子

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

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

谢谢!

+1

http://cdecl.org/ – user3528438

+0

的可能的复制[解释C代码的工具](http://stackoverflow.com/questions/667362/tool-to-explain-c-code) – usr2564301

回答

1

它声明f作为一个指针指向一个函数采取float *一个float指针)以及返回int。然后,您可以使用它像这样

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

'3.5'不是'float *'。 – mch

3

该行声明f为指针的函数接受float *作为它的参数和返回一个int

声明似乎棘手,但它仅仅是跟随C的规则。如果我们写

int *f(float *); 

然后,它看起来就像是f返回int *功能。因此,正确的优先级必须在*f左右使用圆括号。

+0

好极了,那么这是否意味着指针'f'只会接受'float *'而没有别的? – madhaj1

1

如果你有声明:

int foo(float *); 

这将是明显的,这是一个函数定义。使用(*f)而不是foo可以给你一个指向函数的指针。

2

下面是如何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 
+0

我回答了这个问题,但是如果没有指针参数“* real”(我没有很好地使用它),它会更清晰,给出一个比说明函数指针。 –

相关问题