更多复杂声明式的解释

MSDN原文:http://msdn.microsoft.com/en-us/library/1x82y1z4(v=vs.80).aspx

译文:

你可以将任意一个声明包含在有关闭的括号中,从而在复杂的声明式中指定一个特殊的解释。复杂的声明式指的是它的标识符被超过一个的数组修饰符,指针修饰符或者函数修饰符所限定。它能够在单个的标识符上采用多种组合的数组修饰,指针修饰或者函数修饰。通常typedef可以应用于一些简单的标识符。详情请看“Typedef Declarations”。

在解释复杂声明式的过程中,括号和括弧(就是那些位于标识符右端的修饰符)要先于星号*(就是那些位于标识符左端的修饰符)。括号和括弧有相同的优先级,并且都是从左到右结合的。在声明式被完全解释之后,类型修饰才作为最后一个步骤被应用。通过使用括弧,你可以覆盖默认的结合顺序,然后强制构建一个特殊的解释。但是决不要用一个括弧包含一个标识符名称自身,因为这样会被误认为是一个参数列表。

一种解释复杂声明式的简单方法是使用以下的四个步骤,按从里到外的顺序解读声明式:

       1、从标识符开始,向右看一个或多个括号或括弧。

       2、解释完这些括号或括弧之后,向左看一个星号*。

       3、如果你在任何阶段遇到了一个右括号,那么返回,然后为一切有括号的

式子应用规则1和规则2。

    4、为这个解释应用类型修饰。

 

char *( *(*var) () )[10];

 ^   ^  ^ ^ ^   ^    ^
 7   6   4 2  1   3     5

 

在这个例子中,解释的步骤可如下以数字按序编号,然后依次解释:

1、标识符var被声明为

2、一个指向……的指针

3、一个返回……的函数

4、一个指向……的指针

5、一个含有10个……元素的数组

6、一个指向……的指针

7、一个char型数据

 

标识符var被声明为指向返回一个指向含有10个指向char型数据的指针元素的数组的指针的函数的指针。

posted @ 2012-03-21 23:16  crazylhf  阅读(124)  评论(0)    收藏  举报