美文网首页
C运算符优先级

C运算符优先级

作者: SpringAlways | 来源:发表于2020-04-16 11:03 被阅读0次
    优先级记忆参考表 (防遗忘、防原网址失效)

    下表列出 C 运算符的优先级和结合性。运算符从顶到底以降序列出。


    image.png

    --


    image.png
    --
    1. 前缀 ++-- 的运算数不能是转型。此规则在文法上禁止某些表达式本来也会在语义上非法的表达式。某些编译器忽略此规则并检测语义上的非法。
      2.sizeof 的运算数不能是类型转型:表达式 sizeof (int) * p 无歧义地转译成 (sizeof(int)) * p ,而非 sizeof((int)*p)
    2. 条件运算符中部( **?****:** 之间)的表达式分析为如同加括号:忽略其相对于 ?: 的优先级。
    3. 赋值运算符的左运算数必须是一元(第 2 级非转型)表达式。此规则在文法上禁止某些表达式本来也会在语义上非法的表达式。从而许多编译器忽略此规则并在语义上检测其非法。例如, e = a < d ? a++ : a = d 是因此规则而无法剖析的表达式。然而许多编译器忽略此规则并将它剖析成 e = ( ((a < d) ? (a++) : a) = d ) ,并给出错误,因为它在语义上非法。

    分析表达式时,列于上面表中某行的运算符,将比列于低于它的行中拥有较低优先级的任何运算符,更紧密地绑定到其参数(如同用括号)。例如,表达式 *p++ 被分析为 (p++) ,而非 (p)++ 。

    拥有相同优先级的运算符以其结合性的方向绑定到其参数。例如表达式 a = b = c 被分析为 a = (b = c) 而非 (a = b) = c,因为从右到左结合性。

    image.png
    引用自https://zh.cppreference.com/w/c/language/operator_precedence

    相关文章

      网友评论

          本文标题:C运算符优先级

          本文链接:https://www.haomeiwen.com/subject/zpolvhtx.html