0

私のコードは:

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

上記のコードの皆さん: 、および!!に出力8されます。C7Java

これはなぜですか?説明してください。

4

6 に答える 6

8

7それはJavaで印刷されます。x=x++;と同等です:

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

前置演算子 ,を使用した場合、結果は異なっていたでしょう++x

ここで自分の目で確かめてください: java code ; Cコード

Cの出力を理解するために、これらの未定義の動作(i = i++ + ++i、i = i++など)を誰でも説明できますか.

于 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 で任意の結果が得られます。sequential pointsについては C でお読みください。 で参照C ProgrammingできDennis ritchieます。

于 2013-08-01T11:45:58.070 に答える
0

これは、演算子の優先順位によるものです。= は、Java よりも C の方が優先されます。

于 2013-08-01T11:45:00.997 に答える