c编程中while循环的行为

behavior while loop in c programming

这种情况下的输出是 1

int main() {
    int i = 500;
    while( (i++) != 0 );
    printf("%d\n", i);
    return;
}

这种情况下的输出是 0

int main() {
    int i = 500;
    while( (i=i+1) != 0 );

    printf("%d\n", i);
    return;
}

我不确定为什么在每种情况下都会得到不同的输出我的意思是为什么第一种情况下为 1 而第二种情况下为 0

对于初学者来说,这两个程序都有未定义的行为。与其将变量 i 声明为有符号整数类型 int,不如将其声明为无符号整数类型 unsigned int 以使程序正确。

这个while循环

while( (i++) != 0 );
当表达式 i++ 等于 0 时,

停止迭代。所以当变量 i 等于 0 时循环停止。但是由于后缀递增运算符,它的值递增并变得等于 1.

根据 C 标准(6.5.2.4 后缀递增和递减运算符)

2 The result of the postfix ++ operator is the value of the operand. As a side effect, the value of the operand object is incremented (that is, the value 1 of the appropriate type is added to it).

这个while循环

while( (i=i+1) != 0 );

在赋值 i = i + 1.

后当 i 等于 0 时也停止迭代