双重增量后的结果 - 在if语句及其正文中

时间:2016-08-30 21:21:23

标签: c if-statement post-increment

有人可以解释一下为什么这一短代码会返回1?

int i = 0;
if(i++) i++;
printf("%d", i);

我的意思是在检查if语句时i必须递增,否则结果不会是1.但是随着它的增加,应该再次增加,结果为2。

更好的是,为什么这行代码会产生2?

int i = 0;
if(++i || i++) i++;

也是这个

int i = 0;
if(++i && i++) i++;

返回3.

1 个答案:

答案 0 :(得分:2)

  • 代码行if(i++)在递增之前检查i的值。因此,自i=0以来检查失败,在检查之后,i将在离开if条件之前递增,使其等于1.
  • if(++i || i++)通过++i,因为在检查条件之前评估i++,条件为1,条件为真,然后react-native run-android将导致2。
  • 此外,由于++ i将为1而i ++仍为1,因为我将在其增加之前首先使用。所以1&& 1为真,然后在离开条件之前,i将增加到2,并且if下面的行将被评估为3,i的新值将为3。