インクリメント演算子とデクリメント演算子

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください