0

我的代码是:

 code(){
    int x=7;
    x=x++;
    output x;   //prints 8 in C, prints 7 in Java
 }

伙计们上面的代码:打印8在,C和!7Java

为什么会这样?请解释。

4

6 回答 6

8

7这将在 Java 中打印。x=x++;相当于:

int temp = x;
x = x + 1;  
x = temp;

如果您使用前缀运算符 , ,结果会有所不同++x

在这里自己看看:java代码C 代码

阅读任何人都可以解释这些未定义的行为(i = i++ + ++i、i = i++ 等)以理解 C 中的输出。

于 2013-08-01T11:42:20.700 回答
6

在 Java 中,x=x++, 被计算为:

int temp = x;
x = x + 1;
x = temp;

所以,基本上没有变化是x在那个表达之后。

但是C,该表达式是Undefined Behavior。另请参阅序列点 Wiki

于 2013-08-01T11:42:45.867 回答
5

此代码在 C 中导致未定义的行为,因此结果可能是任何 7、8、15 或页面错误。为什么这段代码给出 7,是编译器的问题。

于 2013-08-01T11:43:25.127 回答
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  
于 2013-08-01T11:43:30.080 回答
1
x=x++;

这在 C 中给出了任意结果,主要取决于编译器。阅读C 中的内容。sequential points您可以参考C Programming.Dennis ritchie

于 2013-08-01T11:45:58.070 回答
0

这是因为运算符优先级。= 在 C 中的优先级高于 Java。

于 2013-08-01T11:45:00.997 回答