C语言:C运算符优先级

元素单目乘除余,

加减移位大小等,

位与异或逻与或,

条件赋值组合逗。
 
元素:   ()  []   ->   .
单目:    !   ~   ++   --   (type)类型转换   *   &   sizeof
乘除余:*   /   %
加减:    +   -
移位:    <<   >>
大小:    <   <=    >   >=
等:        ==   !=
位与:    &
位异或:^
位非:    |
逻与:    &&
逻或:    ||
条件:    ?:
赋值:    =
组合:    +=   /=   -=   *=
逗:        ,
 
★单目运算符、赋值是“自右向左”,所以*p++会被解释成*(p++),而不是(*p)++。
其他运算符结合性都是“自左向右”,所以a,b,c等价于 (a,b),c 而不是a,(b,c)。
★单目运算符低于元素运算符,所以定义一个函数指针p,要写成 (*p)(),如果写成*p(),会被解释成*((p))。
★类型转换也是单目运算符,优先级与其他单目一致,注意单目是“自右向左”结合的。
★与或异或并不同级:与>(异或)>或。
★赋值运算符不能保证任何求值顺序,所以 y[i]=x[i++] 是不可预测的,y[i]中的i可能是自增后的,也可能是自增前的。同理 y[i++]=x[i]也是不可预测的

猜你喜欢

转载自www.cnblogs.com/wuqi1003/p/12239625.html