此C程序的输出

时间:2011-08-15 01:20:00

标签: c

这个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?

3 个答案:

答案 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.循环终止。