【问题标题】:casting a pointer to a float or pointing to a function with a pointer parameter将指针转换为浮点数或指向带有指针参数的函数
【发布时间】:2016-05-12 20:55:04
【问题描述】:

在学习 C 语言时,我正试图准确理解这行代码是什么。

int (*f) (float *)

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

这是否会被归类为指向名为 f 的 int 的指针,该指针被强制转换为指向浮点的指针

这会不会是一个名为 f 的指针,指向一个带有指针参数的函数。

如果有人可以提供帮助并可能解释两者之间的原因或区别,那就太好了,因为我在理解这个概念时遇到了一些麻烦。

谢谢!

【问题讨论】:

标签: c pointers parameters


【解决方案1】:

该行将f 声明为指向接受float * 作为其参数并返回int 的函数的指针。

声明可能看起来很棘手,但它只是遵循 C 的规则。如果我们写

int *f(float *);

那么看起来f 是一个返回int * 的函数。因此,必须在*f 周围使用括号强制正确的优先级。

【讨论】:

  • 太棒了,这是否意味着指针f 将只接受float * 而没有别的?
【解决方案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

【讨论】:

  • 我提出了这个问题,但如果没有指针参数*real(我没有充分利用)给出一个*而不是真正需要说明的问题,它会更清楚函数指针的使用。
【解决方案3】:

如果你有声明:

int foo(float *);

很明显,这是一个函数定义。使用 (*f) 而不是 foo 可以为您提供指向函数的指针。

【讨论】:

    【解决方案4】:

    它将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 *
    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多