-8

次のコードがあるとします。

j=3;   // Line 1
i=6;   // Line 2
i+=5;  // Line 3
j=i--; // Line 4

...私の知る限り、 の値はj6 になります。 の場合、 は--i5 になります。

しかし、4 行目以降の値を出力すると、i3 行目の 11 ではなく 10 が返されます。

なぜこれが起こるのですか?これは、数値であると宣言iし、後でコードに戻って別の変数を に設定した場合、コード内のi--ほとんどの前に、グローバルにi'sの値を変更することを意味しますか?i

4

3 に答える 3

4

コードでは、次の手順を参照してください。

j=3;   //Line 1, j ==3
i=6;   //Line 2, i == 6
i+=5;  //Line 3, i == i + 5 == 11
j=i--; // line 4, j == 11, i == 10, after this line.

詳しく説明すると、 は のx += yように分解できるx = x + yので、それだけです。

post-decrementに関しては、式が評価された後に副作用 (減分) が発生します。とにかく、次のステートメントの前に、の値がi減少します。

参照を追加するにはC11、章 §6.5.2.4 から、

後置++演算子の結果は、オペランドの値です。副作用として、オペランド オブジェクトの値がインクリメントされます (つまり、適切な型の値 1 が追加されます)。[...]

後置--演算子は後置演算子に似て++いますが、オペランドの値が減分される (つまり、適切な型の値 1 がオペランドから減算される) 点が異なります。

前デクリメントと後デクリメントの違いは、それらが使用されている式内でのみ表示されることに注意してください。変数を使用した次の命令の観点からは、どちらも同じ結果 (効果) になります。

于 2015-12-16T13:41:30.673 に答える
2

最初にibecomeの値を作成し、次に11この値を に代入するjと、の減少が起こります。最後の行は次と同等ですi

j = i;
i -= 1;

もしそうならj = --i;、最後の行は次のようになります

i -= 1;
j = i;

jなるでしょう10

于 2015-12-16T13:45:13.453 に答える
1

デクリメント演算子は、--1 による減算と同じではありません。それらは使用された左辺値を変更するため、使用されるたびi--i変更されます。

于 2015-12-16T13:44:22.387 に答える