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

Yog*_*Raj 2 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;
}
Run Code Online (Sandbox Code Playgroud)

程序的输出是0,2,2.条件语句如何改变C中变量b的值?

Bla*_*aze 8

我们来看看这一行:

*((a+1 == 1) ? &b : &a) = a ? b : c;
Run Code Online (Sandbox Code Playgroud)

(a+1 == 1)1这样的

*(1 ? &b : &a) = a ? b : c;
Run Code Online (Sandbox Code Playgroud)

这是

*(&b) = a ? b : c;
Run Code Online (Sandbox Code Playgroud)

由于a仍然是0,也就是

*(&b) = c;
Run Code Online (Sandbox Code Playgroud)

这意味着获取地址b,并将其指向(b)的值设置为c,即2.那么到底,它的作用是改变b2.

如果三元运算符(?)让您感到困惑,可以在此处阅读.