c语言中:int i=1,j; j=(++i)+(++i)+(++i)+(++i); 结果:i=5;这个很容易理解.但是j=15谁能解释一下?

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 09:47:19
c语言中:inti=1,j;j=(++i)+(++i)+(++i)+(++i);结果:i=5;这个很容易理解.但是j=15谁能解释一下?c语言中:inti=1,j;j=(++i)+(++i)+(++i

c语言中:int i=1,j; j=(++i)+(++i)+(++i)+(++i); 结果:i=5;这个很容易理解.但是j=15谁能解释一下?
c语言中:int i=1,j; j=(++i)+(++i)+(++i)+(++i); 结果:i=5;这个很容易理解.但是j=15谁能解释一下?

c语言中:int i=1,j; j=(++i)+(++i)+(++i)+(++i); 结果:i=5;这个很容易理解.但是j=15谁能解释一下?
你好
按照你所说的j=15
我可以肯定的说你用的是vc++6.0
因为vc++9.0及其之后的版本都是j=20

经过自己的揣摩 下面给你详细讲一讲vc++6.0版本对于此代码的编译过程:
首先我们知道++i是返回i+1的值
j= (++i)+(++i)+(++i)+(++i);
运行第一个(++i)后 i=2 此时j=2
运行第二个(++i)后 i=3 此时j=3+3=6(因为前加后再返回i的值)
运行第三个(++i)后 i=4 此时有点儿变化 j=3+3+4=10(这时i再次变化后不影响之前两次(++i)的返回值)
运行第四个(++i)后 i=5 j=3+3+4+5=15

下面给你讲一讲vc++9.0的编译过程:
运行第一个(++i)后 i=2 此时j=2
运行第二个(++i)后 i=3 此时j=3+3
运行第三个(++i)后 i=4 此时j=4+4+4
运行第四个(++i)后 i=5 此时j=5+5+5+5
你会发现每运行一次(++i)后 都会影响前面(++i)的返回值 而且前面(++i)的返回值和当前(++i)的返回值相同

比较两个编译器的区别:
vc++6.0是在前两次运行(++i)后会影响之前的返回值
之后运行(++i)后不影响之前的返回值

然而vc++9.0运行(++i)后都会影响前面的(++i)的返回值

也就是说j=几和编译器的版本有关系
讲的很多 希望楼主能理解