【发布时间】:2016-05-13 16:32:22
【问题描述】:
我有点困惑...是否有人可以识别评估顺序以及此处实际声明的内容,也许是指针和我们期望使用这些找到的类型?
书面解释也足够了,一切都会很棒。真的是任何你觉得你可以充分解释它的作用的方法都会很棒!
这在 C/C++ 中有什么作用?
int (*f) (float *);
【问题讨论】:
标签: c++ c declaration typecasting-operator
我有点困惑...是否有人可以识别评估顺序以及此处实际声明的内容,也许是指针和我们期望使用这些找到的类型?
书面解释也足够了,一切都会很棒。真的是任何你觉得你可以充分解释它的作用的方法都会很棒!
这在 C/C++ 中有什么作用?
int (*f) (float *);
【问题讨论】:
标签: c++ c declaration typecasting-operator
它声明了一个函数指针f指向一个函数,该函数接受一个指向float的指针并返回一个int。
如果没有 *f 周围的括号,您将声明一个函数 f,它接受一个指向 float 的指针并返回一个指向 int 的指针。
【讨论】:
cdecl(C 胡言乱语 ↔ 英语)是这样解释的
int (*f) (float *);将 f 声明为返回 int 的函数指针(指向浮点数的指针)
如果您不熟悉该语言,此服务对于解释基本语法非常有用。
好吧,措辞可以改进一点:
将 f 声明为函数指针,使用指向 float 参数的指针并返回 int
【讨论】:
f 是一个函数指针。换句话说,f 是一个指向函数的指针,该函数接受 float*(指向 float 的指针)并返回 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` */
【讨论】:
function 的语法高亮是蓝色的?