前のエントリで 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 の値が違うものになるわけだ。これはデクリメント演算子でも同じ。気をつけないとね。