运算符优先级
1 .优先级高于*,可以用->替代消除这个问题 *p.v可以替代为p->v
2 []高于*
3 函数()高于* int *fp()
4 ==和!= 高于位操作符 val&mask!=0
5 ==和!= 高于赋值符
6 算术运算高于移位运算
7 逗号运算在所有运算符中优先级最低 i=1,2 会被解释为(i=1),2
,运算符的结果是最右边的值,上面的结果为常数2,最终被丢弃。
a=b=c
所有的赋值操作符都具有右结合性,该表达式会先执行b=c,再执行a=b.
大部分的表达式中里各个操作数的计算顺序是不定的,如a()+g()这两个是先执行a()还是g()是没有定义的,有利于编译器根据平台进行编译。但&&和||的操作数计算顺序是有定义的,采用从左向右的顺序计算