
C言語基礎|前置増分演算子と前置減分演算子
はじめに:前置の ++ と -- は「先に更新して、その結果を使う」タイプ
i++ や i--(後置)は「使ってから更新」でしたね。
一方で今回の主役、++i や --i(前置)は 更新してから使う のが特徴です。
- 前置:先に 1 増やす(減らす)→ その値が式の値になる
- 後置:先に式の値として使う → その後 1 増やす(減らす)
この違いは、単独で i++; みたいに書くと分かりにくいのですが、
printf("%d", ++i); のように 式の中で使った瞬間に、しっかり差が出ます。
サンプル:目標回数だけ入力して、最大値と最小値を表示する
指定回数の整数を入力し、最大値と最小値を表示するプログラムを例に解説をします。
プロジェクト名:chap4-10-1 ソースファイル名:chap4-10-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// 指定された個数の整数を読み込み、最大値と最小値を表示
#include <stdio.h>
int main(void)
{
int count;
printf("いくつ入力しますか:");
scanf("%d", &count);
int i = 0;
int x;
printf("1回目の値を入力してください:");
scanf("%d", &x);
int max = x;
int min = x;
while (++i < count) { // 先に i を増やしてから判定に使う
printf("%d回目の値を入力してください:", i + 1);
scanf("%d", &x);
if (x > max) max = x;
if (x < min) min = x;
}
printf("最大値:%d\n", max);
printf("最小値:%d\n", min);
return 0;
}実行例
いくつ入力しますか:4
1回目の値を入力してください:10
2回目の値を入力してください:3
3回目の値を入力してください:18
4回目の値を入力してください:7
最大値:18
最小値:3前置増分演算子・前置減分演算子とは(書式と役割)
前置演算子の基本
| 種類 | 書式 | 何をする? | 式全体の値は? |
|---|---|---|---|
| 前置増分演算子 | ++a | a を 1 増やす | 増やした後の値 |
| 前置減分演算子 | --a | a を 1 減らす | 減らした後の値 |
「式の値が更新後」というのが、前置のいちばん大事な性格です。
後置との違いを並べて理解しよう(ここが核心)
前置と後置の違い
| 種類 | 書式 | 変数の更新 | 式として得られる値 |
|---|---|---|---|
| 前置 | ++i | 先に増える | 増えた後の i |
| 後置 | i++ | 後で増える | 増える前の i |
| 前置 | --i | 先に減る | 減った後の i |
| 後置 | i-- | 後で減る | 減る前の i |
評価の順番(前置は「更新 → 使用」、後置は「使用 → 更新」)
たとえば i が 0 のときに評価するとこうなります。
増分演算式の評価
前置 ++i
i を 1 増やす → i は 1
式の値は 1
後置 i++
式の値は 0
その直後に i を 1 増やす → i は 1
この「式の値がどっちになるか」が、printf や while 条件の中で効いてきます。
サンプルのこの行がポイントでした。
while (++i < count)
while (++i < count) の中身(日本語)
(1) まず i を 1 増やす
(2) 増えた i と count を比較する
(3) 真ならループ本体へ、偽なら終了
もし i++ < count にすると、比較に使われるのが増える前の値になり、
ループ回数やタイミングが変わることがあります。
こういう「条件式の中で使う」ときに、前置・後置の差が目に見えて出ます。
前置演算子のよくある使いどころ
前置 ++/-- が読みやすくなる場面
| 場面 | 例 | うれしい点 |
|---|---|---|
| 先に番号を進めてから使う | printf("%d回目", ++i); | 表示が自然(1,2,3…) |
| 先に更新してから判定 | while (++i < n) | 判定と更新の意図が一致 |
| デクリメントしてから使う | --remain; | 残り数を先に減らして扱える |
注意:単独で使う場合は前置と後置は見た目の差が出にくい
例えば次の2つは、単独文としては動きがほぼ同じです。
i++;
++i;
どちらも「i が 1 増える」だけなので、単独なら違いが表に出ません。
違いが出るのは、式の値が使われるとき(printf、代入、条件式など)です。
ここで登場した命令の書式まとめ
前置増分・前置減分
| 書式 | 意味 |
|---|---|
| ++a | a を 1 増やし、その値を式の値として返す。 |
| --a | a を 1 減らし、その値を式の値として返す。 |
while文
| 書式 | 意味 |
|---|---|
| while (式) 文 | 式が真の間、文を繰り返す。 |
| while (式) { ... } | 式が真の間、ブロックを繰り返す。 |
まとめ:前置は「更新後の値が欲しい」ときに使うとスッキリする
- 前置 ++a / --a は「先に更新して、その値が式の値」
- 後置 a++ / a-- は「先に式の値として使って、その後更新」
- 単独文では差が見えにくいけれど、条件式や表示で差が出る
- ループ回数や番号付けの意図に合わせて、前置・後置を選ぶのがコツ
