在命令行参数中使用螺旋规则
以下声明有什么区别?
char *argv[];
我
char *(argv[]);
认为根据螺旋法则也是一样的。
what is the difference between the below declarations?
char *argv[];
and
char *(argv[]);
I think it is same according to spiral rule.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
正如所写,括号没有区别。
所谓的螺旋规则源于 C 语法的这个简单事实:后缀运算符(例如
()
和[]
)比一元运算符(例如*)具有更高的优先级
,因此像*f()
和*a[]
这样的表达式会被解析为*(f())
和*(a[])
。因此,给定一个相对复杂的表达式,例如
它解析为
As written, the parentheses make no difference.
The so-called spiral rule falls out of this simple fact of C grammar: postfix operators such as
()
and[]
have higher precedence than unary operators like*
, so expressions like*f()
and*a[]
are parsed as*(f())
and*(a[])
.So given a relatively complex expression like
it parses as
是的,它们是一样的。
char *(argv[])
仍然表示指针的数组。char (*argv)[]
会有所不同,因为它表示指向char
数组的指针。Yes, they are the same.
char *(argv[])
still means an array of pointers.char (*argv)[]
would be different as it means a pointer to an array ofchar
's.argv[]
不是类型,因此(argv[])
不能是函数声明 - 它是优先级操作。[]
(是否优先),然后找到*
,就像我们使用*argv[]
一样,因此他们是平等的。argv[]
is not a type so(argv[])
can't be a function declaration - it's a precedence operation.[]
(precedence or not) and then*
, just as we do with*argv[]
, thus they are equal.