符号优先级

← 返回 MOC


C 语言所有运算符,按优先级从高到低排列(同一级别结合性相同):

优先级运算符说明结合性
1(最高)()函数调用左→右
[]数组下标左→右
.成员访问左→右
->指针成员访问左→右
++ --后缀自增/自减左→右
2++ --前缀自增/自减右→左
+ -单目正/负右→左
!逻辑非右→左
~按位取反右→左
*解引用右→左
&取地址右→左
sizeof取大小右→左
(type)强制类型转换右→左
3* / %乘、除、取余左→右
4+ -加、减左→右
5<< >>位左移、位右移左→右
6< <= > >=关系比较左→右
7== !=相等、不等左→右
8&按位与左→右
9^按位异或左→右
10|按位或左→右
11&&逻辑与左→右
12||逻辑或左→右
13?:三目条件右→左
14= += -= *= /= %= &= ^= |= <<= >>=赋值右→左
15(最低),逗号左→右

在声明中只看第 1、2 级: () [] 优先级高于 *,想让 * 先结合必须加括号。

float *fg();    // ()先结合 → fg 是函数,返回 float*
float (*fg)();  // 括号强制 * 先 → fg 是指向函数的指针
int *a[];       // []先结合 → a 是数组,元素是 int*
int (*a)[];     // 括号强制 * 先 → a 是指向数组的指针