解读C的声明的最好方法是用英语来阅读,道理很简单,因为C语言是美国人发明的。
为了把问题变得更简单,在这里暂不考虑const和volatile。接下来遵循以下步骤来解释C的声明。
数组元素个数和函数的参数属于类型的一部分。应该将它们作为附属类型的属性进行解释。
比如:int (* func_p)(double);
1.首先着眼于标识符。 int (* func_p)(double); 英语的表达为 func_p is
2.因为存在括号,这里着眼于*。 int (* func_p)(double); 英语的表达为func_p is pointer to
3.解释用于函数的(),参数是double。int (* func_p)(double);
英语的表达为:func_p is pointer to function(double) returnning
4.最后解释数据类型修饰符int。int (* func_p)(double);
英语的表达为:func_p is pointer to function(double) returnning int。
5.最后翻译成中文:func_p是指向返回int的函数的指针。
根据这样的步骤,可以解释任何一个声明,比如更为复杂的:int atexit(void (*func)(void));
英语的表达为:atexit is function (func is pointer to function(void) returnning to void) returnning int.
翻译成中文为:atexit 是返回int的函数的(参数是,指向返回void没有参数的函数指针)
原文:http://www.cnblogs.com/philospy/p/3995511.html