C运算符优先级

优先级记忆参考表 (防遗忘、防原网址失效)

下表列出 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容