q=++j+(++j)+(++j)问题
void main() { int i = 5, j =5, p, q; p = (i++) + (i++) + (i++); q = (++j) + (++j) + (++j); printf("%d, %d, %d, %d", p, q, i, j); system("pause"); }
p的值可以确定是15(因为是先使用i的值再把i+1三次),i和j也可以确定都是是8(因为都自增了三次),但是q的值受编译器的运算顺序影响,值不确定(因为你不能保证j的值在运算的式子里是什么时候自增了,里面没有一个顺序点)。
这样子的题目不应该出的,因为这个运算过程并没有C语言标准的相关规定,由具体的编译环境自行确定。
q=++j+(++j)+(++j)这个则是不确定的,因为有可能是6+6+6,可能是6+7+8,可能是8+8+8,可能是6+7+7...因为你无法确定编译器会用什么顺序来计算j的值。
vc6.0:+为双目运算符默认并且结合方向是左到右所以q = 7+7+8=22