Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本C指针和函数_C_Function_Pointers_Function Pointers - Fatal编程技术网

基本C指针和函数

基本C指针和函数,c,function,pointers,function-pointers,C,Function,Pointers,Function Pointers,我试图弄清楚函数声明的含义: int *f(); 及 f是一个函数,返回int*,g是指向函数返回int的指针 int *f(); 上面一行是函数f的声明,该函数具有未指定数量的参数,并返回int* int (*g)(); 上面一行是指向一个函数的指针g的声明,该函数具有未指定数量的参数,并返回一个int,作为此处其他正确答案的补充,我想我要提到的是,这是破译此类声明的一个方便工具: int *f(); $ cdecl Type `help' or `?' for help cdecl&

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

int *f();


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

int *f();
上面一行是函数
f
的声明,该函数具有未指定数量的参数,并返回
int*

int (*g)();

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

,作为此处其他正确答案的补充,我想我要提到的是,这是破译此类声明的一个方便工具:

int *f();
$ 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
可能已经安装在您的计算机上,或者您可以通过位于的一个方便的web界面使用它。

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

T *f();
读作

   f     -- f
   f()   -- is a function (() binds before *)
  *f()   -- returning a pointer
T *f();  -- to T (for some type T)
    g     -- g
  (*g)    -- is a pointer
  (*g)()  -- to a function
T (*g)(); -- returning T.  
如果要强制
*
()
之前绑定,则必须使用括号显式分组,以便

T (*g)();
读作

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

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

int(*f())
是否更改了任何内容?@calccrypto与
int*f()的声明相同
@calccrypto,这与您的
int*f()
示例相同。它只是有一组额外的括号。