
C言語基礎|後置増分演算子と後置減分演算子
はじめに:カウンタ更新は「短く・正確に」書けると気持ちいい
プログラムを書いていると、回数を数える変数とか、残り回数を管理する変数って、ほんとに頻繁に出てきます。
- 1回処理したら回数を1増やす。
- 1回使ったら残りを1減らす。
この「1だけ増やす/1だけ減らす」を、スッと書けるのが
後置増分演算子 ++ と 後置減分演算子 -- です。
しかもこの2つ、ただ短いだけじゃなくて、式の中で使ったときの値がちょっと独特なんです。
そこも含めて、やさしく整理していきますね。

サンプル:クーポンを使った回数を数え、残り回数を減らす
「クーポンを最大3回まで使える。使うたびに使用回数を増やし、残り回数を減らす」プログラムを例に解説します。
プロジェクト名:chap4-5-1 ソースファイル名:chap4-5-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// クーポン使用回数を数え、残り回数を減らす
#include <stdio.h>
int main(void)
{
int used = 0; // 使った回数
int remaining = 3; // 残り回数
int ans; // 使うかどうか
do {
printf("クーポンを使いますか?(はい:1/いいえ:0):");
scanf("%d", &ans);
if (ans == 1 && remaining > 0) {
used++; // 後置増分:使った回数を1増やす
remaining--; // 後置減分:残り回数を1減らす
printf("クーポンを使いました。使用回数=%d、残り=%d\n", used, remaining);
} else if (ans == 1 && remaining == 0) {
printf("もうクーポンは使えません(残り0回)\n");
} else {
printf("今回は使いませんでした。\n");
}
} while (ans == 1);
printf("終了します。最終的な使用回数=%d、残り=%d\n", used, remaining);
return 0;
}実行例
クーポンを使いますか?(はい:1/いいえ:0):1
クーポンを使いました。使用回数=1、残り=2
クーポンを使いますか?(はい:1/いいえ:0):1
クーポンを使いました。使用回数=2、残り=1
クーポンを使いますか?(はい:1/いいえ:0):1
クーポンを使いました。使用回数=3、残り=0
クーポンを使いますか?(はい:1/いいえ:0):1
もうクーポンは使えません(残り0回)
クーポンを使いますか?(はい:1/いいえ:0):0
終了します。最終的な使用回数=3、残り=0後置増分演算子 a++ と後置減分演算子 a-- って何?
まずは基本から。a++ と a-- は次の意味です。
後置増分演算子と後置減分演算子
| 種類 | 演算子 | 説明 |
|---|---|---|
| 後置増分演算子 | a++ | a の値を 1 増やす(式全体の値は増やす前の値) |
| 後置減分演算子 | a-- | a の値を 1 減らす(式全体の値は減らす前の値) |
ここでの「後置」は、演算子が変数の 後ろ に付くからです。
used++ のように書きます。
まずは単体で使う:a++ は a を1増やす(読み方はこれでOK)
単独の文として使うなら、理解はめちゃくちゃシンプルです。
ほぼ同じ意味の書き方
| やりたいこと | 通常の書き方 | 短い書き方 |
|---|---|---|
| 1増やす | a = a + 1; | a++; |
| 1減らす | a = a - 1; | a--; |
だから、サンプルの
- used++; は「使用回数を1増やす」
- remaining--; は「残り回数を1減らす」
という意図が、とても分かりやすくなります。
後置増分・後置減分の動き
後置増分 a++ は、イメージとしてはこうです。
a++ の処理
(1) 式の値としては「増やす前の a」を使う
(2) その後で a を 1 増やす
後置減分 a-- はこう。
a-- の処理
(1) 式の値としては「減らす前の a」を使う
(2) その後で a を 1 減らす
単独の文なら (1) の「式の値」は表に出ないので、
結果として「1増える/1減る」とだけ覚えておけばOKです。
大事ポイント:式の中で使うと「増やす前の値」が使われる
ここが後置の特徴で、つまずきやすいところでもあります。
たとえば、次のコードを見てください。
int a = 5;
printf("%d\n", a++);
printf("%d\n", a);この出力はこうなります。
- 1行目:5(増や前の値が表示される)
- 2行目:6(その後 a が増えている)
a++ を式の中で使ったとき
| タイミング | a の値 | 式 a++ の値 |
|---|---|---|
| 評価の瞬間 | 5 | 5 |
| 評価が終わった後 | 6 | (式の値はもう使い終わっている) |
同じように a-- も「減らす前」が式の値になります。
よく使う場面:ループのカウンタと残量管理
++ と -- が活躍する代表例はこれです。
典型的な用途
| 目的 | 例 | 意味 |
|---|---|---|
| 回数を数える | i++; | カウンタを1増やす |
| 残り回数を減らす | remaining--; | 残量を1減らす |
| 配列を順に見る | idx++; | 次の要素へ進む |
「1ずつ動かす」操作は本当に多いので、今後ほぼ毎章のように登場します。
ここで登場した命令の書式まとめ
後置増分演算子
| 書式 | 何をする? |
|---|---|
| 変数++ | 変数の値を1増やす(式の値は増やす前) |
後置減分演算子
| 書式 | 何をする? |
|---|---|
| 変数-- | 変数の値を1減らす(式の値は減らす前) |
まとめ:後置 ++ / -- は「短くて読みやすい更新」の定番
- a++ は a を 1 増やす(インクリメント)
- a-- は a を 1 減らす(デクリメント)
- 単独の文として使うなら、更新の意味だけでOK
- 式の中で使うと「増やす前/減らす前」が式の値になる(後置の特徴)
慣れると、コードのテンポが一気に良くなりますよ。
