【问题标题】:C: What is the output of the following code? And please explain [duplicate]C:以下代码的输出是什么?并请解释[重复]
【发布时间】:2016-05-08 23:10:21
【问题描述】:
int a = 5;
if(a==a++){
   printf("true 1");
}
if(a==++a){
   printf("true 2");
}

当我运行这段代码时,它会打印“true 2”。我不明白怎么做。请帮忙。 此外,如何使用增量运算符优先计算逻辑等价?

【问题讨论】:

  • 它将输出一个带有额外奶酪的 PIZZA。
  • UB 尽可能多的方式。
  • 来吧,这个问题每隔几天就会被问一次。请阅读++ 运算符的介绍性文本并在再次提问之前搜索存档。
  • 我不明白为什么这些问题会出现在大学/面试问题中。正确答案是:“停止编写这样的程序!你在做什么!”
  • @AshaAravind 不只是重复。但被每一代学生多次吐出。请让你的教授/助教以后不要再做这样的作业了。

标签: c logical-operators post-increment pre-increment


【解决方案1】:

这段代码会在很多方面给出未定义的行为。但是如果初始化a,不同的是++a会返回增加的值,而a++会返回新的值。

另外,在for 循环中,你应该使用++a,这样你就不会出错。

让我们评估您的问题。

在第一种情况下,当你将aa 的增量值进行比较时(因为a++ 返回增量值),所以它是假的。示例:a 为 5,递增值为 6。因此,由于它们不匹配,因此为 false。

在第二种情况下,当您将aa 的旧值进行比较时(因为++a 返回原始值),您得到了正确的结果。示例:a 有 5,当您使用 ++a 递增它时,您会得到旧值/原始值,这也是 5。因此,您会得到一个 true。

【讨论】:

  • 感谢您的回复。那么,当 a 是后递增或预递增时,if 条件不会总是返回 true 吗?既然我们把它等同于一个本身?
  • @AshaAravind,不,我会解释的。等待几分钟。我会在我的答案中添加它。
【解决方案2】:

a==++a 中的评估顺序未由标准定义。因此++ 可以在比较之前或之后执行。使用另一个编译器,您可以获得不同的结果。这称为“UB”或“未定义行为”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    相关资源
    最近更新 更多