c语言中:int i=1,j; j=(++i)+(++i)+(++i)+(++i); 结果:i=5;这个很容易理解.但是
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/19 21:57:37
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=几和编译器的版本有关系
讲的很多 希望楼主能理解
按照你所说的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=几和编译器的版本有关系
讲的很多 希望楼主能理解
c语言中:int i=1,j; j=(++i)+(++i)+(++i)+(++i); 结果:i=5;这个很容易理解.但是
c语言中,int i=3,j=4 k=++i+j--+++i---j,结果为几?为什么?
int I; int &j=I;I=5;j=I+1;则I=_______,j=_______.
在C语言中j=(i--*--i)+(i++*++i)跟j=(i++*++i)+(i--*--i)的区别,为什么前者j=1
在C语言中 j=(++i)+(++i)+(++i) 这条语句 i和j的结果分别是?
int i=2,j=1,k=3 i&&(i+j)&k|i+j
for( int i=0,j=1; j < 5; j+=3 ) i=i+j; 为什么等于5
int i,j=2;*p=&i;*p=(*&j+1)^j; i=?
c语言中有如下定义:int i,j,*p,*q; 那么下列赋值是否正确?(1)p=&*&i;(2)i=*&j;
C语言问题:j=*i j=&i j=*&i 三者有何区别?
C语言 p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j);
C语言j = c&&i++;是什么意思