当前位置: 代码迷 >> C语言 >> [求助]我是新手//请教一个中等题
  详细解决方案

[求助]我是新手//请教一个中等题

热度:409   发布时间:2007-03-29 16:17:36.0
[求助]我是新手//请教一个中等题
#include "stdio.h"
void main()
{int i1=3,i2=3,j1,j2;
j1=++i1+(++i1)+(++i1);
prinf("i1=%d,j1=%d\n",i1,j1);
j2=++i2+(++i2)+(++i2);
prinf("i2=%d,j2=%d\n",i2,j2);
}
这在TC下输出
i1=6,j1=18 i2=6,j2=9
在vc下输出
i1=6,j1=16 i2=6,j2=9

有那位大哥可以说明为什么啊..谢谢啊...
搜索更多相关的解决方案: include  大哥  

----------------解决方案--------------------------------------------------------

不可能吧!如果是编译器的问题的话j1和j2运行后的结果都不一样吧!是不是弄错了,我这里没vc所以不能你运行看看.我也搞不懂那问题.期待高手的解答!!


----------------解决方案--------------------------------------------------------
有人说是因为没有对j1 j2 初始化
有人说是编译器的问题
这个问题也没什么好讨论的,就这么吧!


----------------解决方案--------------------------------------------------------
确实奇怪,谁能给个说法
----------------解决方案--------------------------------------------------------
j2=++i2+(++i2)+(++i2);
这一类的运算式的运算顺序是由编译器决定,
在平时编程时不应该用这样的表达式,并且一般也没人这样写
也只有考试会考
----------------解决方案--------------------------------------------------------

奇怪 我用WIN-TC结果是

i1=6,j1=18 i2=6,j2=18


----------------解决方案--------------------------------------------------------
#include "stdio.h"
void main()
{int i1=3,i2=3,j1,j2;
j1=++i1+(++i1)+(++i1);
printf("i1=%d,j1=%d\n",i1,j1);
j2=++i2+(++i2)+(++i2);
printf("i2=%d,j2=%d\n",i2,j2);
getch();
}
结果:
i1=6,j1=18
i2=6,j2=18

这是在TC2.0的运行结果.
----------------解决方案--------------------------------------------------------
这种表达式我以后都不解释了,只建议一下不要用就是了
----------------解决方案--------------------------------------------------------
在VC++上运行结果:
i1=6,j1=16
i2=6,j2=16
----------------解决方案--------------------------------------------------------
在TC中
j1=++i1+(++i1)+(++i1);
括号优先级高,--->j1=++i1+i1+(++i1) 这时i1的值为4
--->j1=++i1+i1+i1 这时i1的值为5
--->j1=i1+i1+i1 这时i1的值为6 --->j1=18

----------------解决方案--------------------------------------------------------
  相关解决方案