C参考手册附录A - 声明者的含义

时间:2013-05-19 14:49:10

标签: c

在阅读C参考手册,特别是附录A时,我发现了以下声明

  

在D中具有形式(D1)的声明TD中,D1中的标识符类型与D的类型相同。括号不会改变类型,但可能会更改复杂声明符中的绑定。

声明者如何采用(D1)的形式,以及此处引用的绑定的区别是什么。

例如:int a是一个正确的声明,但int (a)意味着什么?

1 个答案:

答案 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