基本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()
示例相同。它只是有一组额外的括号。