
C言語入門|インクリメント・デクリメント演算子を理解する:前置と後置の評価タイミングの違い
これまでに、= や += などの代入演算子を学んできましたね🙂
その流れで登場するのが、インクリメント演算子とデクリメント演算子です。
「1だけ増やしたい」「1だけ減らしたい」
そんな場面は、プログラムでは本当によく出てきます。
たとえば、
回数を数える。
番号を順番に進める。
ループの回数を制御する。
こうした処理では、
a = a + 1;
と毎回書くより、もっとスッキリ書けたら嬉しいですよね😊
そこで用意されているのが、インクリメント・デクリメント演算子です。

インクリメント・デクリメント演算子とは?
インクリメント・デクリメント演算子は、変数の値を1だけ増やす/減らすための演算子です。
代表的なものを整理すると、次のようになります👇
| 演算子 | 機能 | 評価のタイミング | 意味 |
|---|---|---|---|
| ++a | 1増やす(前置) | 先に増やす | a = a + 1 |
| a++ | 1増やす(後置) | 後で増やす | a = a + 1 |
| --a | 1減らす(前置) | 先に減らす | a = a - 1 |
| a-- | 1減らす(後置) | 後で減らす | a = a - 1 |
どれも「最終的に1増える/1減る」という点は同じですが、
式の中で使ったときの評価タイミングが異なります。
ここが、この演算子の一番のクセであり、
初心者がつまずきやすいポイントです😅
単独で使う場合は違いがない
まずは、シンプルな使い方を見てみましょう。
int a;
a = 100;
a++;
printf("%d\n", a);このプログラムでは、
- a に 100 が入る。
- a++ によって a が 1 増える。
- a の値(101)が表示される。
という流れになります。
出力は次のとおりです。
101このように、インクリメント演算子を単独で使う場合は、
++a でも a++ でも結果は同じになります🙂
このため、最初のうちは
「どっちを使っても同じじゃん?」
と感じる人も多いでしょう。
でも、本当の違いはここからです⚠️
単項演算子という仲間
インクリメント・デクリメント演算子は、オペランドを1つしか持たない演算子です。
こうした演算子は、まとめて
単項演算子(unary operator)
と呼ばれます。
+ や * のように左右に値を取る演算子とは違い、
++a のように、1つの変数だけを対象に処理します。
ここまでは特に難しくありませんね😊
前置と後置で何が違うのか?
問題になるのは、ほかの演算子と一緒に使ったときです。
次のコードを見てください。
int a = 10;
int b = 10;
printf("%d\n", ++a + 50);
printf("%d\n", b++ + 50);一見すると、
「どちらも 10 に 1 を足して、さらに 50 を足す」
ように見えますよね。
でも、実際の出力はこうなります。
61
60えっ、なんで違うの?😳
ここで、前置と後置の評価タイミングの違いがはっきり表れます。
前置インクリメントの評価の流れ
まず、++a + 50 の処理を順番に見てみましょう。
++a + 50この場合の流れは次のとおりです👇
- 変数 a の値が 1 増える(10 → 11)
- 増えたあとの a の値(11)に 50 を足す。
- 61 が表示される。
つまり、前置インクリメントは「先に増やす」のです。
後置インクリメントの評価の流れ
次に、b++ + 50 を見てみましょう。
b++ + 50こちらの流れはこうなります👇
- まず b の現在の値(10)を使って 50 を足す。
- その結果(60)が表示される。
- 式の評価が終わったあとで b の値が 1 増える(10 → 11)
つまり、後置インクリメントは「あとで増やす」のです。
この違いをまとめると、
- ++a:使う前に増える
- a++:使ったあとに増える
ということになります🙂
なぜバグの原因になりやすいのか
インクリメント・デクリメント演算子は、
優先順位が非常に高い
という特徴があります。
そのため、式の中に入れると、
- どのタイミングで増えるのか
- どの値が使われているのか
を正確に把握していないと、
見た目と違う動作になりやすいのです😥
特に、
a = a++ + ++a;のようなコードは、
読む人にも書いた本人にも優しくありません。
安全な使い方のルール
そのため、学習段階では次のルールを強くおすすめします👍
インクリメント・デクリメント演算子は、単独で使う
a++;
i--;このように1行で完結させれば、
評価タイミングを誤解することはありません。
特別な理由がない限り、
ほかの演算子と無理に組み合わせない
という姿勢が、バグを遠ざけてくれます😊
まとめ
最後に、感覚的なイメージをまとめておきましょう。
- インクリメント・デクリメント演算子は値を1だけ変える。
- 前置は「先に変えてから使う」
- 後置は「使ってから変える」
- 単独で使えば安全
- 式の中で使うときは慎重に
このポイントを押さえておけば、
次に出てくる for 文や while 文でも迷わなくなりますよ✨
