0

我今天看到了一个有趣的声明,其中包含后增量和前增量。请考虑以下程序-

#include <stdio.h>

int main(){
    int x, z;

    x = 5;
    z = x++ - 5; // increase the value of x after the statement completed.
    printf("%d\n", z); // So the value here is 0. Simple.

    x = 5;
    z = 5 - ++x; // increase the value of x before the statement completed.
    printf("%d\n", z); // So the value is -1.

    // But, for these lines below..

    x = 5;
    z = x++ - ++x; // **The interesting statement
    printf("%d\n", z); // It prints 0

    return 0;
}

那个有趣的陈述实际上发生了什么?后增量应该在语句完成后增加 x 的值。那么对于该语句,第一个 x的值保持为 5。在预增量的情况下,第二个 x的值应该是 6 或 7(不确定)。

为什么它给z的值是0?是5 - 5还是6 - 6?请解释。

4

1 回答 1

10

这是未定义的行为。编译器可以随心所欲地做任何事情——它可能给出 0,可能给出 42,它可能会擦除你的硬盘驱动器,或者它可能会导致恶魔飞出你的鼻子。C 和 C++ 语言标准允许所有这些行为。

于 2013-08-27T19:30:15.093 回答