在阅读C参考手册,特别是附录A时,我发现了以下声明
在D中具有形式(D1)的声明TD中,D1中的标识符类型与D的类型相同。括号不会改变类型,但可能会更改复杂声明符中的绑定。
声明者如何采用(D1)的形式,以及此处引用的绑定的区别是什么。
例如:int a
是一个正确的声明,但int (a)
意味着什么?
答案 0 :(得分:6)
int (a)
表示与int a
完全相同。这不是一个“复杂的声明者”。
它确实有所作为的一个例子是在声明一个函数指针时:
int (*f)(float);
这意味着“f
是一个指向函数的指针,该函数接受float
并返回int
”。没有括号,它会显示:
int *f(float);
这意味着“f
是一个函数,它接受float
并返回int*
(指向int
)”的函数。确实有些不同。
尝试使用网站cdecl.org(或命令行工具cdecl
)来解释这些内容:
cdecl> explain int (*f)(float);
declare f as pointer to function (float) returning int
cdecl> explain int *f(float);
declare f as function (float) returning pointer to int