我试图找出函数声明的含义:
int *f();
和
int (*g)();
答案 0 :(得分:6)
int *f();
上面一行是函数f
的声明,它具有未指定数量的参数并返回int *
。
int (*g)();
上面的行是指向一个函数的指针g
的声明,该函数具有未指定数量的参数并返回int
。
答案 1 :(得分:4)
作为对其他正确答案的补充,我想我会提到cdecl(1)
是解密这些声明的便利工具:
$ cdecl
Type `help' or `?' for help
cdecl> explain int *f();
declare f as function returning pointer to int
cdecl> explain int (*g)();
declare g as pointer to function returning int
cdecl
可能已经安装在您的计算机上,或者您可以通过http://cdecl.org上方便的网络界面使用它。
答案 2 :(得分:3)
f
是一个函数,返回int*
而g
是指向返回int
的函数的指针。
答案 3 :(得分:2)
函数调用()
等后缀运算符的优先级高于*
等一元运算符,所以
T *f();
读为
f -- f
f() -- is a function (() binds before *)
*f() -- returning a pointer
T *f(); -- to T (for some type T)
如果要强制*
在()
之前绑定,则必须使用括号明确分组,所以
T (*g)();
读为
g -- g
(*g) -- is a pointer
(*g)() -- to a function
T (*g)(); -- returning T.
规则类似于数组:T *a[N]
是指向T
的指针数组,而T (*p)[N]
是指向T
数组的指针。