[英]casting a pointer to a float or pointing to a function with a pointer parameter
在學習C的過程中,我試圖確切地了解這行代碼是什么。
int (*f) (float *)
我知道第一部分是一個指向f的int的指針,但是第二部分是我不確定的。
是否將此分類為指向名為f的int的指針,該類型轉換為float指針
要么
這將是一個名為f的指針,該指針指向帶有指針參數的函數。
如果有人可以提供幫助並可能解釋兩者之間的區別或原因,那將是很棒的,因為我在理解這個概念時遇到了一些麻煩。
謝謝!
該行將f
聲明為指向函數的指針,該函數接受float *
作為其參數並返回int
。
該聲明看似棘手,但它僅遵循C的規則。
int *f(float *);
然后,似乎f
是一個返回int *
的函數。 因此,必須在*f
周圍使用括號來強制使用正確的優先級。
這是如何定義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
它將f
聲明為指向使用float *
( float
指針 )並返回int
的函數的指針 。 然后您可以像這樣使用它
float array[5] = {1.0, 2.0, 3.0, 4.0, 5.0};
printf("%d\n", f(array));
如果您有聲明:
int foo(float *);
很明顯,這是一個函數定義。 使用(*f)
代替foo
可為您提供指向函數的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.