我的代码是:
code(){
int x=7;
x=x++;
output x; //prints 8 in C, prints 7 in Java
}
以上代码:在 8
中打印 C
,在 7
中打印 Java
strong> {{1}} !!
为什么会这样?请解释一下。
答案 0 :(得分:8)
这将在Java中打印7
。 x=x++;
相当于:
int temp = x;
x = x + 1;
x = temp;
如果您使用前缀运算符++x
,结果会有所不同。
阅读Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)以理解C中的输出。
答案 1 :(得分:6)
在Java中,x=x++
被评估为:
int temp = x;
x = x + 1;
x = temp;
因此,在表达式之后基本上没有变化x
。
但是,在C
中,该表达式为Undefined Behaviour。另请参阅Sequence Points Wiki
答案 2 :(得分:5)
此代码在C中导致未定义的行为,因此结果可能是任何,7,8,15或Page fault。为什么这段代码给出7,是编译器问题。
答案 3 :(得分:1)
在 Java 背景中,出现类似以下内容(对于i = i++
语句):
int temp = i; // store current value of i
i = i + 1; // increase i because of i++
i = temp; // assign to i
答案 4 :(得分:1)
x=x++;
这在C中给出任意结果,主要取决于编译器。阅读C中的sequential points
。您可以C Programming
引用Dennis ritchie
。
答案 5 :(得分:0)
这是因为运营商的优先权。 = C中的优先级高于Java。