【问题标题】:explain why difference in the same code [duplicate]解释为什么相同代码中的差异[重复]
【发布时间】:2013-08-01 11:39:51
【问题描述】:

我的代码是:

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

上面的代码:打印 8C7Java !!

为什么会这样?请解释一下。

【问题讨论】:

标签: java c


【解决方案1】:

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

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

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

在这里亲自看看:java code; C code.

阅读 Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…) 以理解 C 中的输出。

【讨论】:

  • @MarkoTopolnik 感谢 Ideone 的证明。
  • 先生,我已经运行了这段代码。我已经看到了这个解释,但为什么这种行为在 C 中有所不同? ://
  • @anonymous 不一样。
  • @anonymous 并阅读此内容:stackoverflow.com/questions/949433/…
  • @anonymous。 C 中未定义该行为。它可以根据不同的编译器和环境为您提供不同的输出。
【解决方案2】:

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

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

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

然而,在C 中,该表达式是Undefined Behaviour。另见Sequence Points Wiki

【讨论】:

  • 可能他的意思是说他的 C 代码打印 8 是因为在他的编译器中:x = x++; 分为两部分:x = x; 然后 x = x + 1; 因为 ++。但是是的,它的编译器依赖于 C。
  • @GrijeshChauhan。嗯,是。这就是我在回答中写的。我没有在C 中讨论过输出,因为它在那里没有定义。在Java中,保证是7,而OP说是8
  • 再次检查 OP 在 Java 中说 7 但在 C 中他得到了 8
  • @GrijeshChauhan。啊!我认为他改变了它。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    Java 后台,会发生类似以下情况(对于i = i++ 语句):

    int temp = i; // store current value of i  
    i = i + 1; // increase i because of i++  
    i = temp; // assign to i  
    

    【讨论】:

      【解决方案5】:
      x=x++;
      

      这会在 C 中给出任意结果,主要取决于编译器。阅读 C 中的 sequential points。您可以通过 Dennis ritchie 引用 C Programming

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 错了。这会在 Java 中打印 7。而且优先级都是一样的。
        • 在 C 中,它是特定于编译器的,即未定义的,而在 Java 中,它是在语言规范中定义的(在分配给 lhs 之前,rhs 已被完全评估,包括副作用)。跨度>
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        相关资源
        最近更新 更多