增量和减量运算符

use*_*153 -5 c operators decrement

我对这个程序的输出感到困惑:

#include<stdio.h>
int main()
{
    int i=2;
    while(i + 1?--i:14)
        printf("\n%d", i);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上述程序的输出是打印1而不是打印1然后0

何时i--使用而不是--i它将打印1然后0

为什么是这样?

  • 为什么在预先制作它只打印1而不打印0
  • 为什么在postdecrementation中打印1然后0呢?

Ami*_*rma 5

这是因为i--将执行在递减操作之前给出值的结果.但是,在--i我将使用其值之前将减少.

为了更好地理解它:让我们使用你的例子:

 i=2;
Run Code Online (Sandbox Code Playgroud)

情况1:

while(i+1?--i:14)
Run Code Online (Sandbox Code Playgroud)

第一遍:
条件i+1?--i:14将被评估为2+1 ? 1 : 14
将返回1.循环将被执行并i包含该值1.

第二遍:
条件i+1?--i:14将被评估为1+1 ? 0 : 14
将返回0.因此循环将不会被执行,因此您将获得输出1.

案例2:

while(i+1?i--:14)
Run Code Online (Sandbox Code Playgroud)

第一遍:
条件i+1?i--:14将被评估为2+1 ? 2-- : 14
将返回2.循环将被执行并i包含该值1.

第二遍:
条件i+1?i--:14将被评估为2+1 ? 1-- : 14
将返回1.循环将被执行并i包含该值0.

while在这种情况下,循环将执行两次.

  • 更正:`--i`将*评估*为'i-1`,但不能保证`i`将在评估后立即递减; 唯一的保证是它会在下一个序列点之前递减.这是为什么像`--i*--i`这样的表达式是坏juju的部分原因. (2认同)