C操作符优先级

来自cppreference.com
< c‎ | language
 
 
C语言

|- class="t-nv-h1" | colspan="5" | 基本主题 |-

|- class="t-nv-h1" | colspan="5" | 流程控制 |-

| |- |

预处理器
注释
关键字
ASCII码表
转义序列
C语言历史
条件执行语句
if语句

|

|-

循环语句

| |- |

|

|-

跳转语句

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 函数 |-

函数声明 内联指示

|- class="t-nv-h1" | colspan="5" | 类型 |- | |- |

|

|-

指示符 cv指示符 存储类指示符 对齐指示符 (C99) 函数指示符 (C99) 字面值

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 表达式 |-

计算顺序 操作符 操作符优先级 替代表示

|- class="t-nv-h1" | colspan="5" | 工具 |-

typedef 类型声明 属性 (C99) 转换

|- class="t-nv-h1" | colspan="5" | 杂项 |-

内嵌汇编
 

下表列出了C操作符的优先级和结合性。操作符以优先级降序从上到下列出。

优先级 操作符 描述 结合性
1 ++ -- 后缀自增与自减 从左向右
() 函数调用
[] 数组下标
. 访问结构体和联合体成员
−> 通过指针访问结构体和联合体成员
(类型){列表} 复合字面值(C99)
2 ++ -- 前缀自增和自减 从右向左
+ 一元正和负
! ~ 逻辑非和按位非
(类型) 类型转换
* 间接寻址(取消引用)
& 取地址
sizeof 取长度
_Alignof 取对齐要求字节数(C11)
3 * / % 乘法、除法和求余 从左向右
4 + 加法和减法
5 << >> 按位左移和右移
6 < <= 关系运算符<和≤
> >= 关系运算符>和≥
7 == != 关系运算符=和≠
8 & 按位与
9 ^ 按位异或
10 | 按位或
11 && 逻辑与
12 || 逻辑或
13 ?: 三元条件操作符 从右向左
14 = 简单赋值
+= −= 以和差赋值
*= /= %= 以积、商和余数赋值
<<= >>= 以按位左移和右移赋值
&= ^= |= 以按位与、异或和或赋值
15 , 逗号 从左向右

在对表达式做语法分析时,某一行列出的操作符会比低于它的一行的任何操作符更紧密地与参数结合(就像用括号)。

在同一单元格中的操作符(可能有数行操作符列在同一单元格中)有相同的优先级并以指定方向结合。例如,由于从右向左的结合性,表达式a=b=c被解析为a=(b=c),而不是(a=b)=c。请注意,这并不影响子表达式a、b和c的求值顺序