2011-03-06 8 views
1

を増分後:この前インクリメント例ではC++演算子前、私はこのコード例のプリ/ポストインクリメント理解していないのです

int1 = 14; 
int2 = ++int1; 
// Assert: int1 == 15 && int2 == 15 

を理由INT1 == 15していますか? int2だけでなく、int1が増分されるのはなぜですか?

その後、我々は持っている:このポストインクリメント例で

int1 = 14; 
int2 = int1++; 
// Assert: int1 == 15 && int2 == 14 

なぜINT2 == 14はいますか? int2がインクリメントされていないのはなぜですか?int1は何ですか?

答えて

2

両方++int1int1++インクリメントint1に相当するbecauこれはインクリメント演算子が何をするかです:それらはオペランドをインクリメントします。

プリインクリメント演算子とポストインクリメント演算子の戻り値が異なるため、int2が第1の例では15、第2の例で14である理由があります。ポストインクリメント演算子はオペランドをインクリメントしますが、オペランドはインクリメントされる前にあった。プリインクリメント演算子は、オペランドの新しい値を返します。

0

事前インクリメントの例では、int1がインクリメントされてからint2に割り当てられます。ポストインクリメントの例では、int1がint2に割り当てられ、THEN int2がインクリメントされます。

3
int1 = 14; 
int2 = ++int1; 

int1 = 14; 
int1 = int1 + 1; 
int2 = int1; 

int1 = 14; 
int2 = int1++; 

に相当する

int1 = 14; 
int2 = int1; 
int1 = int1 + 1; 
+0

あなたの答えは非常によく表現されています、私は理解しています。 – MJH

+1

これは非常に緩やかな "同値"であることに注意する価値があります。数値結果を正しく説明していますが、シーケンスの精度が同等ではありません。 '++'の評価プロセスにはシーケンスポイントは含まれていませんが、これらの「同等の」バージョンはプロセスにシーケンスポイントを導入し、実際には存在しない追加の保証を行います。 – AnT

1

前置インクリメント演算子は、そのオペランドをインクリメントし、インクリメントされた値を返し:ポストインクリメントは、そのオペランドをインクリメントし前増分を値を返し

int i = 0; 
++i; // now i is 1, and the returned 1 is discarded 
int j = ++i; // and now i is 2, and the returned 2 is stored in j 

を:

int i = 0; 
i++; // now i is 1, and the returned 0 is discarded 
int j = i++; // now i is 2, and the returned 1 is stored in j 
0

いずれか++使用することにより変数の前後に関係なく、その変数を増分しています。前後に置くことに関して何が変わるかは、操作から返されるものです。

int1の値

int1 = 1;
int2 = int ++; // int1 value [1]を返し、int1を1だけインクリメントします。[2] int3 = ++ int; // int1 [2]を1 [3]インクリメントしてからint1を返します。[3]

0

どのように発生する可能性があるか把握する方法がないため、質問に答えにくいです。

最初の質問では、なぜint1がインクリメントされているのかを尋ねています。唯一可能な回答はであるため、です。インクリメント演算子を適用しました。変数にインクリメント演算子を適用すると(接頭辞や接尾辞は関係ありません)、変数はインクリメントされます。期間。

ここでは、両方の例でint1にインクリメント演算子を適用します。そして今、あなたはがなぜそれが増えたのか尋ねていますか?申し訳ありませんが、そのような質問はちょうど意味がありません。 増分演算子が増分であることがわかっていない場合は、変数を増やすためには、質問をする前に基本的な本をまず読んでおく必要があります。 int2については

それはインクリメントされることはありませんので...あなたは、int2にインクリメント演算子を適用することはありません。決して。あなたの例には、int2が増分される場所はありません。

どちらの場合も、int2には単に値が割り当てられます。この値は、インクリメント演算子の結果をint1に適用したものです。そして、あなたは、この場合に知っておく必要があるすべては、前置インクリメントは、そのオペランドの新しい値を返します(そのため、++int115に評価しながら、後置インクリメントは、(そうint1++14に評価される)、そのオペランドの古い値を返すということです)。これらの2つのケースでは、これはint2に入ります。

関連する問題