【问题标题】:How does the conditional operator change the value of the variable b in the program below?下面程序中条件运算符如何改变变量b的值?
【发布时间】:2019-05-15 17:56:29
【问题描述】:
#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的值?

【问题讨论】:

  • 第一个条件表达式返回一个指针,您可以取消引用。

标签: c conditional ternary-operator


【解决方案1】:

让我们看看这一行:

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

【讨论】:

  • 这是一个很好的解释@Blaze,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 2015-01-09
  • 1970-01-01
相关资源
最近更新 更多