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

How does the conditional operator change the value of the variable b in the program below?

#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的值?

我们来看这一行:

*((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