条件运算符如何在下面的程序中更改变量b的值?

时间:2018-12-14 12:47:15

标签: c conditional ternary-operator

#include<stdio.h>
int main()
{
    int a = 0, b = 1, c = 2;
    *((a+1 == 1) ? &b : &a) = a ? b : c;
    printf("%d, %d, %d\n", a, b, c);
    return 0;
}

程序的输出为0、2、2。条件语句如何更改C中变量b的值?

1 个答案:

答案 0 :(得分:8)

让我们看看这一行:

*((a+1 == 1) ? &b : &a) = a ? b : c;

(a+1 == 1)1,所以变成了

*(1 ? &b : &a) = a ? b : c;

哪个

*(&b) = a ? b : c;

由于a仍为0,因此

*(&b) = c;

这意味着将获取b的地址,并将其指向的值(b)设置为c,即2。所以最后,它所做的就是将b更改为2

如果三元运算符(?)使您感到困惑,则可以继续阅读here