2

我试图弄清楚函数声明的含义:

int *f();

int (*g)();
4

4 回答 4

6
int *f();

上面的行是一个函数的声明,f它具有未指定数量的参数并返回一个int *.

int (*g)();

上一行是一个指向函数的指针的声明,g该函数具有未指定数量的参数并返回一个int.

于 2012-11-19T21:38:57.247 回答
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上的便捷 Web 界面使用它。

于 2012-11-19T21:41:49.727 回答
3

f是一个函数,返回int*并且g是一个指向函数返回的指针int

于 2012-11-19T21:38:34.103 回答
2

诸如函数调用之类的后缀运算符的()优先级高于诸如 之类的一元运算符*,因此

T *f();

读作

   f     -- f
   f()   -- is a function (() binds before *)
  *f()   -- returning a pointer
T *f();  -- to T (for some type T)

如果你想强制*绑定 before (),你必须明确地用括号分组,所以

T (*g)();

读作

    g     -- g
  (*g)    -- is a pointer
  (*g)()  -- to a function
T (*g)(); -- returning T.  

数组的规则类似:T *a[N]是指向的指针的数组T,而T (*p)[N]是指向 的数组的指针T

于 2012-11-19T22:07:10.470 回答