下面的声明有什么区别?
char *argv[];
和
char *(argv[]);
我认为根据螺旋法则,这是相同的。
最佳答案
正如所写,括号没有区别。
所谓的螺旋规则源于 C 语法的这个简单事实:后缀运算符,例如 ()
和[]
比 *
等一元运算符具有更高的优先级,所以像 *f()
这样的表达式和*a[]
被解析为 *(f())
和*(a[])
。
因此给出一个相对复杂的表达式,例如
*(*(*foo)())[N]
它解析为
foo -- foo
(*foo) -- is a pointer (parens force grouping)
(*foo)() -- to a function
(*(*foo)()) -- returning a pointer (parens force grouping again)
(*(*foo)())[N] -- to an array
*(*(*foo)())[N] -- of pointer
关于c - 在命令行参数中使用螺旋规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487118/