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

标签 c pointers declaration command-line-arguments spiral

下面的声明有什么区别?

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/

相关文章:

c++ - 二叉树搜索实现和函数声明c++

java - 为什么a long 写成L

c - Bison:$1、$2 等的交替顺序给出错误的输出

c++ - C++中使用指针调用函数

c - 当您在 C 语言中声明参数数量错误的回调时会发生什么?

C-分配内存的函数

objective-c - 再次声明时可以随机设置变量吗?

c - char[ ] 和 char * 存在缓冲区溢出漏洞

c - sprintf() 在 C 中没有尾随空空格

c - 如何在 8-10 字节数据中填充 n 个 16 位值的任意数量的值?