消息关闭
    暂无新消息!

C/C++关于i++,i--的问题

问题作者 : 潮潮2017-07-21发布
int i = 0; 
printf("%d %d %d %d\n", i, i++, i++,i--);
cout << i << " " << i++ << " " << i++ << " " << i-- << endl;
输出结果为:
1 0 -1 0
2 1 0 1
请问为什么

4个回答

︿ 2
1 参数从右向左顺序计算。
2 对于后缀形式的自增(自减)表达式,先取变量的值作为表达式的值,然后该变量再加1(减1)。

int i = 0; 
此时i=0
先算i--表达式的值为0,然后i = i -1 = -1
再算右边第一个i++表达式的值为-1,然后i = i + 1 = 0
再算右边第二个i++表达式的值为0, 然后i = i + 1 = 1
再算i的值等于 1
printf("%d %d %d %d\n", i, i++, i++,i--); //输出 1 0  -1 0

此时i = 1,开始执行下一句。
先算i--表达式的值为1,然后i = 1 -1 =  0
再算右边第一个i++表达式的值为0,然后i = 0 + 1 = 1
再算右边第二个i++表达式的值为1, 然后i = 1+ 1 = 2
再算i的值等于 2
cout << i << " " << i++ << " " << i++ << " " << i-- << endl; //输出 2 1 0 1
︿ 0
同一表达式中多个子表达式,标准对于其求值顺序未进行强制规定
这个程序放在不同编译器下可能结果就不一样了

求值顺序和参数的压栈顺序,操作数的结合律,操作符运算优先级是不一样的概念