在 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` */
我有点困惑...是否有人可以确定求值顺序以及此处实际声明的内容,也许是指针以及我们希望使用它们找到的类型?
书面说明也可以,一切都很棒。真的任何你觉得你可以完全解释这是做什么的方式都很棒!
这在 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` */