これらのプリインクリメント演算子を解釈する方法は?
プレインクリメント演算子は右から左への結合性を持っているため、最も右側i
がインクリメントされるか、すべてがi
一度インクリメントされますか?
main()
{
int i=3,j;
j=++i*++i*++i;
printf("%d",j);
}
答えは216です。
これらのプリインクリメント演算子を解釈する方法は?
プレインクリメント演算子は右から左への結合性を持っているため、最も右側i
がインクリメントされるか、すべてがi
一度インクリメントされますか?
main()
{
int i=3,j;
j=++i*++i*++i;
printf("%d",j);
}
答えは216です。
c11標準によると、§6.5 par。ワーキング ドラフトの 2では、これらのような式は実際には定義されていません。
++i は、操作の前に i をインクリメントします。
あなたのコードは次と同等です:
int i=3,j;
j=(i+1)*(i+2)*(i+3);
i++;i++;i++;
printf("%d",j);
これは4*5*6=120を出力します
答えは150
(++i * ++i) * ++i と等しいか、最初の ++i は i をインクリメント (i=4)、2 番目の ++i は i をインクリメント (i=5) しますが、同じ i なので 5* 5 = 25。最終的に 25 * ++i = 150