前のエントリで for ループのインクリメント部をこう書いた。
i = i + 1
インクリメント演算子を使うとこう書ける。
i++
インクリメント演算子は変数の値を1大きくする演算子だ。同様に1小さくするデクリメント演算子もある。
i--
デクリメント演算子を使った for ループの例:
for (i = 100; i > 0; i--) { printf("%d", i); }
インクリメント演算子とデクリメント演算子には、変数の後につける書き方と、変数の前につける書き方がある。上の例の場合にはどっちでも変わらないけど、場合によっては結果に影響することもある。
試してみよう。このプログラムは、「11 10」と出力する。
#include int main(void) { int i, j; i = 10; j = i++; printf("%d %d\n", i, j); return 0; }
takatoh@nightschool $ ./sample_2_5a 11 10
これに対してこっちのプログラムは「11 11」と出力する。
#include int main(void) { int i, j; i = 10; j = ++i; printf("%d %d\n", i, j); return 0; }
takatoh@nightschool $ ./sample_2_5b 11 11
違うのは9行目だけだ。i++ が j に代入したあとに i をインクリメントするのに対して、++i は代入の前にインクリメントする。結果として j の値が違うものになるわけだ。これはデクリメント演算子でも同じ。気をつけないとね。