在 C/C++ 中,int (*f) (float *) 会创建什么?

In C / C++, What would int (*f) (float *) create?

我有点困惑...是否有人可以确定求值顺序以及此处实际声明的内容,也许是指针以及我们希望使用它们找到的类型?

书面说明也可以,一切都很棒。真的任何你觉得你可以完全解释这是做什么的方式都很棒!

这在 C/C++ 中有什么作用?

int (*f) (float *);

它声明了一个函数指针 f 指向一个接受浮点指针和 returns 整数的函数。

如果没有 *f 周围的括号,您将声明一个函数 f 接受一个指向 float 的指针和 returns 一个指向 int 的指针。

这就是cdecl(C乱码↔英语)的解释

 int (*f) (float *);

declare f as pointer to function (pointer to float) returning int

如果您是该语言的新手,此服务对于解释基本语法非常有用。


嗯,措辞可以改进一下:

将 f 声明为指向函数的指针,使用指向 float 参数的指针并返回 int

f是函数指针。换句话说,f 是一个指向函数的指针,该函数接收一个 float*(指向 float 的指针)和 returns 一个 int.

这是一个例子:

假设你有一个像这样的函数:

int function(float* fltPtr)
{
    // ...
    return SOME_VALUE;
}

然后,您可以使用

int (*f) (float *) = &function; // `&` is optional

使函数指针f指向function的地址。在此之后,您可以使用

float flt = 0.5f;
int retVal = f(&flt); /* Call the function pointed to by `f`, 
                         passing in the address of `flt` and
                         capture the return value of `function` in `retVal` */

调用函数。上面的代码相当于

float flt = 0.5f;
int retVal = function(&flt); /* Call the function `function`, 
                                passing in the address of `flt` and
                                capture the return value of `function` in `retVal` */