在命令行参数中使用螺旋规则

发布于 2024-12-05 07:29:54 字数 132 浏览 3 评论 0原文

以下声明有什么区别?

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

巴黎夜雨 2024-12-12 07:29:54

正如所写,括号没有区别。

所谓的螺旋规则源于 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

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

*(*(*foo)())[N]

it parses as

     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
酒与心事 2024-12-12 07:29:54

是的,它们是一样的。 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 of char's.

冷︶言冷语的世界 2024-12-12 07:29:54
  1. argv[] 不是类型,因此 (argv[]) 不能是函数声明 - 它是优先级操作。
  2. 使用螺旋规则,我们首先找到 [] (是否优先),然后找到 *,就像我们使用 *argv[] 一样,因此他们是平等的。
  1. argv[] is not a type so (argv[]) can't be a function declaration - it's a precedence operation.
  2. Using the spiral rule we first find [] (precedence or not) and then *, just as we do with *argv[], thus they are equal.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文