这个C程序的输出应该是什么?
int main()
{
int x=1,y=1,z;
if (z=(y>0)) x=5;
printf("%d %d",x,z);
return 0;
}
正如所料,输出X是5,Z是1.这是因为当表达y> 0时,它是真的,依此类推。现在问题在于这个程序:
int main()
{
int x,y;
for (y=1;(x=y)<10;y++)
;
printf("%d %d",x,y);
return 0;
}
输出不应该是无限循环吗?原因是,(x = y)总是返回true(1),总是小于10?
答案 0 :(得分:7)
不,(x=y)
在将x设置为y的值后返回新值。
但是,(x==y)
如果相等则返回1,如果不相等则返回0.
答案 1 :(得分:2)
x = y
是一项任务,您对x == y
感到困惑。实际发生的是x
获取y
的值,然后将其与10进行比较,直到< 10
条件停止为真。
在您的示例中,y == 1
(最初)和x
未初始化,因此x == y
不一定是真的。
答案 2 :(得分:2)
原因是因为在某些时候,y将评估为10分配给x。赋值的值为10因此不小于10.循环终止。