顺时针/螺旋-规则
顺时针/螺旋规则可以概括成下面简单的三步:
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. 简单声明
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. 函数指针声明
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. 终极声明
Stop and trying.