顺时针/螺旋-规则

顺时针/螺旋规则可以概括成下面简单的三步:

  1. 从一个未知元素开始,以螺旋/顺时针的方向移动,当遇上下面的元素时,用相应的词替换它:

     [X] 或 []

        =>类型为…的大小为X的数组(Array X size of…)或类型为…的未知大小的数组(Array undefined size of…)

     (type1, type2)

        =>参数为type1和type2、返回值为…的函数(function passing type1 and type2 returning…)

     *

        =>指向…的指针(pointer(s) to…)

  2. 以螺旋/瞬时间方向继续移动,直到覆盖所有的符号。

  3. 总是先解决在括号的对象

 

实例1. 简单声明

GV[$WJ[]O3NEG0@$CY{PV06

Q:str是什么?

  · 从str开始,螺旋顺时针方向移动,遇到的第一个字符是一个"[",意味着str是一个数组,因此:

          str是一个大小为10,类型为…的数组(str is an array 10 of…)

  · 继续螺旋顺时针方向移动,下面遇到的是一个"*",意味着是指针,因此:

          str是一个大小为10,指向…的指针的数组(str is an array 10 of pointers to…)

  · 继续螺旋顺时针方向移动,这是碰到了;也就是结束了,但我们还没有覆盖到所有的字符,所以移动继续,这时我们遇到了"char",因此:

          str是一个大小为10,指向char的指针的数组

到目前为此,我们已经覆盖到了语句中的所有字符,我们完成了声明解析。

 

实例2. 函数指针声明

QQ图片20131026101339

Q:fp是什么?

  · 从fp开始,螺旋顺时针方向移动,遇到的第一个符号是“)”,因此fp是在一个括号内,那么我们继续在括号内部进行顺时针旋转,接下来的字符是“*”,因此:

          fp是一个指向…的指针(fp is a pointer to…)

  · 现在我们出了括号,继续螺旋顺时针移动,碰到了“(”,我们得到了一个函数,因此:

          fp是一个指向参数为int和float指针、返回值为…的函数的指针(fp is a pointer to function passing an int and a pointer to float returnning…)

  · 继续螺旋顺时针移动,这时我们碰到了“*”字符,因此:

          fp是一个指向参数为int和float指针、返回值为…指针的函数的指针(fp is a pointer to a function passing an int and a pointer to float returning a pointer to…)

  · 继续螺旋顺时针移动,碰到了“;”,但是我们还没有覆盖到语句中的所有字符,所以我们继续移动,最后碰到了“char”,因此:

          fp是一个指向参数为int和float指针、返回值为char指针的函数的指针(fp is a pointer to a function passing an int and a pointer to float returning a pointer to a char)

 

实例3. 终极声明

QQ图片20131026102925

 

Stop and trying.

 

 

reference:http://c-faq.com/decl/spiral.anderson.html

posted @ 2013-10-26 10:33  Navono  阅读(1182)  评论(0编辑  收藏  举报