我想確切瞭解這行代碼是,因爲我學習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