簡體   English   中英

將指針轉換為浮點數或使用指針參數指向函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM