这段代码的输出是0,有人可以解释一下

时间:2017-12-01 18:06:12

标签: c

以下是代码:

int main() 
{
 int x = 2, y = 0;
 int z = (y++) ? y == 1 && x : 0; /* Need help here */
 printf("%d\n", z);
 return 0; 
} 

在第4行需要帮助。为什么输出0,需要帮助plzzzzzzzz

2 个答案:

答案 0 :(得分:3)

解决这些问题的最佳方法是了解运算符优先级。首先展开最低优先级运算符,在本例中为赋值运算符和三元运算符:

int main() 
{
    int x = 2, y = 0;
    int z;

    if (y++) {
        z = y == 1 && x;
    } else {
        z = 0;
    }

    printf("%d\n", z);
    return 0; 
}

答案在这里已经很明显 - y++首先评估y0)的值,然后递增它,因此条件评估为{{1} } 0分支,else值为z

答案 1 :(得分:2)

y ++是后增量 试试++ y