C:以下代码的输出是什么?请解释一下

时间:2016-01-31 13:56:34

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

int a = 5;
if(a==a++){
   printf("true 1");
}
if(a==++a){
   printf("true 2");
}

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

2 个答案:

答案 0 :(得分:2)

JSONArray modules = response.getJSONArray("modules"); JSONObject object = modules.getJSONObject(1); JSONArray books = object.getJSONArray("book"); 中的评估顺序未由标准定义。因此,a==++a可以在比较之前或比较之后执行。使用另一个编译器可以获得不同的结果。这被称为“UB'”或“未定义的行为”。

答案 1 :(得分:0)

此代码将以多种方式提供未定义的行为。但是,如果您初始化a,则不同之处在于++a将返回递增的值,而a++将返回新值。

此外,在for循环中,您应该使用++a并且不会出错。

让我们评估您的问题。

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

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