给定一个基本类型的T,可以用*或[]来增强它,每个指针和数组都是这样。例如,[]*T的意思是“指向T的指针数组”,*[]T的意思是“指向T数组的指针”。
让我们调用*和[]类型修饰符。C有一种将这些修饰符与求值顺序联系起来的排序方法。C风格的[]*T变成T *[],*[]T变成T (*)[].通过查看下面的示例,您可能能够理解转换是如何工作的。在这篇文章的末尾也作了解释。
* -> *
[] -> []
[]* -> *[]
*[] -> (*)[]
*[]* -> *(*)[]
[]*[] -> (*[])[]
*[][]* -> *(*)[][]
[]**[] -> (**[])[]
[]*[]* -> *(*[])[]
*[]*[] -> (*(*)[])[]您的程序或函数应该处理输出字符串的输入字符串,如上面的示例所示。输入将只包含没有空白空间的*和[]。
这个挑战是反向的这一挑战,简化了。
C-fix规则:
*s总是先于所有的[]s (在真实的C代码中,变量名介于最后一个*和第一个[]之间)。*,右边有一个[],没有任何括号来确定顺序,那么[]首先绑定,并在前缀:中排在第一位。*[] =C *a[] (其中a是变量名)=“指针数组”=前缀[]*。*,必须将它放在括号中(变量名在哪里):*[] =“指向数组的指针”=C(*a)[](其中a是变量名) = (*)[]。从上一个例子来看,实际C代码中的(*(*)[])[]将类似于int (*(*a)[])[] (其中a是变量名)。计算从a开始,除非一组圆括号阻止绑定,否则首先绑定[]。
如果将int (*(*a)[])[]放置到cdecl.org,则输出为“声明指向指向int数组的指针数组的as指针”。这是因为:
*首先被绑定。[]之间没有括号,导致在下一个*之前绑定。*,因为它位于带有变量名的括号中,而其余的[]则不是。[]被绑定。这是前缀的*[]*[]int a。因此,*[]*[] -> (*(*)[])[]。
发布于 2022-04-10 06:10:40
https://codegolf.stackexchange.com/questions/246125
复制相似问题