i++为后加,执行完整个此语句后,再把i+1赋值给i
++i为先加,先把i+1赋值给i,再执行整个语句


a =(i++),先执行a=i,再对i累加

a =(++i),先累加i,再执行a=i

在表达式中,优先级较高的先于优先级较低的进行运算。 而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。
C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。

例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合, 执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。

而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。

又如有指针p,表达式为*p++,其中p是操作数,而*和++优先级相同,则按照该优先级规定的自右向左顺序,先把++和p结合,然后*和(p++)结合,同时因为是后加,所以相当于*p。