-1

以下のようにコードを入力すると:

int a=10,b,c,d,e;
c= a++;
d = ++a;
e = ++a;
printf("value of c=%d, d =%d, e=%d",c,d,e);

c =10、のような出力が得られd= 12e=13 これらの値を追加すると、つまり10+12+13になり ます35が、次のようにコーディングすると:

b = a++ + ++a + ++a;
printf("value of b=%d" ,b);

それは私に出力を与えます36

このコードの背後にあるプロセスと、コードの出力が異なる理由を誰かが説明できますか? ありがとうございました!

4

3 に答える 3

0
int a=10,b,c,d,e;
c= a++;
d = ++a;
e = ++a;
printf("value of c=%d, d =%d, e=%d",c,d,e);

ステートメントc = a++では、 の値がa最初に使用され (つまり10)、次に にインクリメントされ11ます。
ステートメントはd = ++a最初にインクリメントaし(12現在は)、その値を使用してprintf()ステートメントに出力します。
についても同じですe = ++a

2 番目のスニペット

b = a++ + ++a + ++a;
printf("value of b=%d" ,b);

未定義の動作になります( http://en.wikipedia.org/wiki/Undefined_behavior )

于 2013-06-29T10:51:24.877 に答える
0

おいしい未定義の動作+、 (および他の多くの)オペランドの評価の順序は実装に任されています。したがって、常に362番目のケースであるとは限りません。

于 2013-06-29T10:52:29.210 に答える
-1

それらの違いは、2 番目の式が a++ で終わっておらず、まだ他の値を追加していないため、a++ が 10 ではなく 11 であることです。

于 2013-06-29T10:51:07.883 に答える