c - 双后增量的结果 - 在 if 语句及其主体中

标签 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.

最佳答案

  • 代码行 if(i++) 在递增之前检查 i 的值。因此检查失败,因为 i=0 并且在检查之后,i 将递增,然后离开 if 条件使其等于 1。
  • 但是 if(++i || i++) 通过了,因为 ++i 在检查条件之前被求值,条件被求值为 1 并且条件为真然后 i++ 结果为 2。
  • 此外,由于++i 将为 1,而 i++ 也仍为 1,因为 i 将在其递增之前首先使用。所以 1 && 1 为真,然后在离开条件之前,i 将递增到 2,并且 if 下面的行将被评估为 3,并且 i 的新值将为 3。

关于c - 双后增量的结果 - 在 if 语句及其主体中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39237273/

相关文章:

c - STDIN 重定向 : how to make program end once fgets() reads an expected ending line

javascript - 如何检查 3 个变量中的每一个是否都是空字符串?

r - "binning"行进入范围 (dplyr/R)

python - 如果一行中的一个单元格为空,则更改数据帧中的特定值

java - 编译器首先执行哪个方法?

c++ - 这段代码是如何工作的?

c - 前增量和后增量

c++ - 如何在c中查找同一字符串中该字符的第一次重复出现

c - 即使源代码和编译器标志未修改,是什么导致目标文件在编译之间有所不同?

c - 从二进制文件更新记录(项目的一部分)(段错误)