设i=3,k=(i++)+(i++)+(i++),求k(tc环境)

来源:百度知道 编辑:UC知道 时间:2024/05/15 10:56:43
书上说是9,怎么也看不明白,请大家帮助做个详细解释。

就是9啊
i++就是先使用i然后再累加
所以是3+3+3
执行完之后i自己累加3次变成6

典型的题,不好的代码造成的编译器问题;

应该是编译器实现者的问题,因为立即改变值要分配一个临时内存,也许编译器实现者为了优化性能,省下一块内存,就自作聪明地改为运算后再改变值。

相同的内容代码在不同的编译器出现不同的结果。
k=(i++)+(i++)+(i++)
在Dev-C++中为9,VC++ 2003中为9,java中为12;

i=(k=(i++)+(i++));

1. Dev-C++中,i 的值在给 k 赋值之后自增,随后又被赋值为 k 的值,所以i=6,k=6
2. VC++ 2003中, i 的值在最后,k 给 i 赋值之后才自增,所以i=8,k=6
3. java中, i 的值实时赋值,i++第2次引用时就会自增,所以i=7,k=7

吃惊吧,i 和 k 是连续赋值的,但它们的值竟然不相等。我感觉这方面java是因为不像vc++那样考虑太多内存的问题,所以都配给了临时内存,得出的是正确的值。
正常状况下 每次调用i++都相当于调用:
{
int temp=i;//调用时
i++;
return temp;//调用后,下次调用时的值
}

应该是9
首先I=3
第一次运算
K=3+3+3
第二次应该
K=4+5+6

K=3+3+3
这是正解。
i++是先调用,后增1,但是赋值前是不加的

应该是12吧

3+4+5

i++
先使用后自加
++i是先自加后使用