[原创]谁给我解释下这个程序的运行结果,谢谢!
#include<stdio.h>void main()
{
int x=1,y=0,z;
z=x-->(y+x)?5:25>y++?1:2;
printf("%d, %d ,%d\n",x,y,z);
getch();
}
----------------解决方案--------------------------------------------------------
还想问什么?
?:结合性是先右后左的,<优先,你看看什么结果啊
[此贴子已经被作者于2005-8-23 10:25:47编辑过]
----------------解决方案--------------------------------------------------------
不知道你运行过与分析过程序没有,不要回答得那么草率。
----------------解决方案--------------------------------------------------------
回复:(magic475)[原创]谁给我解释下这个程序的运行...
应该输出:0,1,1
是这样的:根据优先级和结合规则,“=”低于“?:”再低于“>”
所以先计算“>”,再计算“?:”,最后“=”
“=”从右到左 其他两个从左至右
z=x-->(y+x)?5:25>y++?1:2; 应该解释为:
z=( ( (x-->(y+x)) ? 5 : ( 25>y++ ) ? ) 1 : 2);
故得结果 ----------------解决方案--------------------------------------------------------
不好意思 修改一下: z=x-->(y+x)?5:25>y++?1:2; 应该解释为: z=( ( (x-->(y+x)) ? 5 : ( 25>y++ ) ) ? 1 : 2);
----------------解决方案--------------------------------------------------------
我不懂楼上的是用什么编译器得到那样的结果。
我用TC运行得到的结果是0,0,5。如何解释?
----------------解决方案--------------------------------------------------------
我在VC6.0下运行的0,1,1 然后在TC2.0下运行的确实是0,0,5 我想在TC下可能是这么解释的 z=x-->(y+x)?5:25>y++?1:2; 解释为: z=( (x-->(y+x)) ? 5 : (( 25>y++ ) ? 1 : 2 ) ) ; 如果这样的话,在第一个问号得 真 后,(5:)后边的语句(( 25>y++ ) ? 1 : 2 ) 便不再执行 于是x=0 y=0 z=5 唯一的解释是:Borland 和 Microsoft 不是一伙的
----------------解决方案--------------------------------------------------------
z=x-->(y+x)?5:25>y++?1:2;
请问下里面的?和;怎么定义的?
----------------解决方案--------------------------------------------------------
to sdusea: 我想你是对的。 我的理解是这样: x--的值为1;y+x的值为0;所以x-->(y+x)为真
----------------解决方案--------------------------------------------------------