基本C指针和函数

时间:2012-11-19 21:37:14

标签: c function pointers function-pointers

我试图找出函数声明的含义:

int *f();

int (*g)();

4 个答案:

答案 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数组的指针。