4

これは、kn king の c プログラミング : a modern approach からの質問です。私は彼によって与えられた解決策を理解できません:-

The expression ++i is equivalent to (i += 1). The value of both expressions is i after 
the increment has been performed.

とにかくこれをどうやって理解するのですか?

4

7 に答える 7

11
i = 10
printf("%d", i++);

10 を出力します。

printf("%d", ++i);

11を出力します

X = i++このように考えられます

X = i
i = i + 1

ありのままX = ++i_

i = i + 1
X = i

それで、

printf ("%d", ++i); 

と同じです

printf ("%d", i += 1);

だがしかし

printf ("%d", i++);

ただしi、これら 3 つのステートメントのいずれの後の の値も同じになります。

于 2013-08-24T16:15:43.437 に答える
5

解決策とは、差ないという意味であり、表現の文脈に関係なく、たまたま何が起こって++iも同じ意味を持ちます。括弧で囲まれているため、コンテキストに と等価であるが ( と等価である) と等価ではないなどの追加の算術演算が含まれている場合でも、等価性が保持されます。(i += 1)ii += 1++i * 3(i += 1) * 3i += 1 * 3i += 3

同じことは にも当てはまりませんi++。これには同じ副作用 ( のインクリメントi) がありますが、周囲の式の値が異なります —iインクリメントされる前の の値です。

于 2013-08-24T16:12:20.010 に答える
1

これまで取り上げられていない違いの 1 つは、コードの読みやすさです。ループの大部分は 1 ずつインクリメントを使用し、次の要素に移動するときやインデックスを 1 ずつインクリメントするときに i++/++i を使用するのが一般的な方法です。

通常、i+= はインクリメントが 1 以外の場合にのみ使用されます。通常のインクリメントにこれを使用しても危険ではありませんが、理解が少し難しくなり、コードが奇妙に見えます。

于 2013-08-24T19:48:58.757 に答える
0

++iプリインクリメント演算子です。i値を設定して返す前にインクリメントします(これは明らかにですi + 1)。

さて、i++ポストインクリメント演算子です。i表示される命令全体が評価された後、インクリメントされます。

例:

int i = 0;
std::cout << ++i << std::endl; /* you get 1 here */
std::cout << i++ << std::endl; /* you still get 1 here */
std::cout << i << std::endl;   /* you get 2 here */
于 2013-08-24T16:12:49.050 に答える
0

割り当てなしの通常の操作では、次のようになります。

++i および i++

変数を 1 増やします。疑似アセンブリの両方のコードでは、次のようになります。

inc i

ただし、値を割り当てる場合、++の順序が関連します:

x = i++

生産:

mov x, i
inc i

x = ++i

生産:

inc i
mov x, i

i += 1の場合

それは生成します:

add i,1

ただし、コンパイラはコードを最適化するため、この場合も生成されます。

inc i
于 2013-08-24T19:37:47.917 に答える