2016-05-12 120 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」(我沒有很好地使用它),它會更清晰,給出一個比說明函數指針。 –

相關問題