c语言中:int i=1,j; j=(++i)+(++i)+(++i)+(++i); 结果:i=5;这个很容易理解.但是j=15谁能解释一下?
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/28 16:57:38
![c语言中:int i=1,j; j=(++i)+(++i)+(++i)+(++i); 结果:i=5;这个很容易理解.但是j=15谁能解释一下?](/uploads/image/z/5171965-61-5.jpg?t=c%E8%AF%AD%E8%A8%80%E4%B8%AD%EF%BC%9Aint+i%3D1%2Cj%3B+j%3D%28%2B%2Bi%29%2B%28%2B%2Bi%29%2B%28%2B%2Bi%29%2B%28%2B%2Bi%29%3B+%E7%BB%93%E6%9E%9C%EF%BC%9Ai%3D5%3B%E8%BF%99%E4%B8%AA%E5%BE%88%E5%AE%B9%E6%98%93%E7%90%86%E8%A7%A3.%E4%BD%86%E6%98%AFj%3D15%E8%B0%81%E8%83%BD%E8%A7%A3%E9%87%8A%E4%B8%80%E4%B8%8B%3F)
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=几和编译器的版本有关系
讲的很多 希望楼主能理解