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

Tap*_*dra 0 c

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

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

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

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

Tho*_*mas 6

int (a)意思是完全一样的int a.这不是一个"复杂的声明者".

它确实有所作为的一个例子是声明一个函数指针:

int (*f)(float);
Run Code Online (Sandbox Code Playgroud)

这意味着" f是一个指向函数的指针,该函数接受float并返回int".没有括号,它会显示:

int *f(float);
Run Code Online (Sandbox Code Playgroud)

这意味着" 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
Run Code Online (Sandbox Code Playgroud)