同一优先级的运算符在计算时执行的先后顺序根据结合性来决定。右结合性的运算符有三类,分别是:①单目运算符 ②三目运算符(只有一个条件运算符"?:") ③双目运算符里的"赋值运算符(=、+=、-=、/=等)",除此之外的运算符基本都是双目运算符且为左结合性。
指针运算符"*"与自增运算符"++"是同一优先级,根据结合性来决定执行的先后顺序。
*p++: 按照结合性,先执行p++,p++的值就是p的值,也就是p指针指向的地址,再执行指针运算,结果为指针p指向的地址存放的值,再执行自增操作。
*++p: 按照结合性,先执行++p,++p的值是p+1的值,是p的地址的下一地址,再执行指针运算,结果为为指针p存放的下一地址所指向的值,再执行自增操作。
(*p)++: 括号运算符"()"的优先级最高,先执行括号运算符,*p的运算结果是p指向的地址存放的内容,读取出*p的内容后再进行++操作,(*p)++的值就是*p的值。
++(*p): 同上先执行括号运算符,读取*p的内容,然后对*p的内容加1,就是++(*p)的值。