c/c++语言开发共享C定义中的运算符优先级

维基百科声称[]运算符在评估中位于*运算符之前。

那么,为什么以下声明:

 char *a[3]; 

声明一个由3个字符指针组成的数组,而不是根据运算符优先级指向3个字符数组的指针?

    因为,正如维基百科所说, []优先级高于*

    处理声明时, a[3]在处理*之前被处理为’数组3’。

    要声明指向三个字符数组的指针,必须使用括号覆盖默认优先级:

     char (*a)[3]; 

    现在圆括号优先于数组。

    这是声明符的语法,取自标准 (第6.7.5节):

      声明者指针选择直接声明器   直接声明者识别码      ( 声明者 )      direct-declarator [ type-qualifier-list opt assignment-expression opt ]      direct-declarator [ static type-qualifier-list opt assignment-expression ]      direct-declarator [ type-qualifier-list static assignment-expression ]      direct-declarator [ type-qualifier-list opt * ]      direct-declarator ( 参数类型列表 )      direct-declarator ( identifier-list opt )   指针* type-qualifier-list opt      * type-qualifier-list opt指针   type-qualifier-list类型限定符      type-qualifier-list type-qualifier   参数类型列表参数列表      参数列表 , ...   参数列表参数声明      参数列表 , 参数声明   参数声明声明说明符声明符      declaration-specifiers abstract-declarator opt   标识符列表识别码      标识符列表 , 标识符 

    如您所见, []()绑定到*之前的声明* 。 接受宣言

     int *a[N]; 

    声明符是*a[N] ,它符合上面的指针opt direct-declarator模式,因此被解析为*(a[N]) ,因此a是指针的N元素数组。

    总结一下:

     T *a[N] -- declares an N-element array of pointer to T T (*a)[N] -- declares a pointer to an N-element array of T T *f() -- declares a function returning pointer to T T (*f)() -- declares a pointer to a function returning T 

    我对这个问题感到困惑 – 声明的解释与运算符优先级相匹配。 如果你想要一个指向数组的指针,你必须使用parens在[]绑定之前将*绑定到’标识符’。

     char (*a)[3]; 

      以上就是c/c++开发分享C定义中的运算符优先级相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544655.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐