私のコードは:
code(){
int x=7;
x=x++;
output x; //prints 8 in C, prints 7 in Java
}
上記のコードの皆さん: 、および!!に出力8
されます。C
7
Java
これはなぜですか?説明してください。
7
それはJavaで印刷されます。x=x++;
と同等です:
int temp = x;
x = x + 1;
x = temp;
前置演算子 ,を使用した場合、結果は異なっていたでしょう++x
。
ここで自分の目で確かめてください: java code ; Cコード。
Cの出力を理解するために、これらの未定義の動作(i = i++ + ++i、i = i++など)を誰でも説明できますか.
Java ではx=x++
、 は次のように評価されます。
int temp = x;
x = x + 1;
x = temp;
x
というわけで、基本的にはその表現以降に変化はありません。
ただし、そのC
式はUndefined Behaviorです。シーケンス ポイント Wikiも参照してください。
このコードは C で未定義の動作を引き起こすため、結果は 7、8、15、またはページ フォールトのいずれかになります。このコードが7を与える理由は、コンパイラの問題です。
Javaバックグラウンドでは、(i = i++
ステートメントに対して) 次のようなことが発生します。
int temp = i; // store current value of i
i = i + 1; // increase i because of i++
i = temp; // assign to i
x=x++;
これにより、主にコンパイラに応じて、C で任意の結果が得られます。sequential points
については C でお読みください。 で参照C Programming
できDennis ritchie
ます。
これは、演算子の優先順位によるものです。= は、Java よりも C の方が優先されます。