双后增量的结果 - 在 if 语句及其主体中
Result of double postincrementation - in if statement and its body
有人能解释一下为什么这一行短代码返回 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++;
Returns 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.
有人能解释一下为什么这一行短代码返回 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++;
Returns 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.