演算子の前置きと後置きについて
インクリメント演算子とデクリメント演算子には、それぞれ前置きと後置きの二種類が存在します。どちらを使用するかによって結果が異なりますので使い方を理解しておく必要があります。ここでは C 言語のインクリメント演算子とデクリメント演算子に対する前置きと後置きの違いについて解説します。
(Last modified: )
演算子の前置きと後置き
インクリメント演算子には前置きと後置きが用意されています。
前置き: ++変数 後置き: 変数++
デクリメント演算子も同じように前置きと後置きが用意されています。
前置き: --変数 後置き: 変数--
前置きも後置きもどちらも変数の値を 1 だけ増加または減少させるという点では同じ動作をします。例えば次の例を見てください。
int var1 = 8; int var2 = 8; var1++; printf("var1 = %d\n", var1); ++var2; printf("var2 = %d\n", var2);
上記では変数 var1 も変数 var2 もインクリメント演算子を実行した後は同じく 1 だけ増加します。
前置きと後置きの違い
では前置きと後置きの違いを確認します。次の例を見てください。
int var1 = 8; int var2; var2 = var1++;
上記の場合、 var1++
によって変数 var1 の値が 1 増加され、その結果である 9 が変数 var2 に格納されるように思われますが、実際には var2 には 8 が格納されます。実は上記の例は次のように記述した場合と同じです。
int var1 = 8; int var2; var2 = var1; var1 = var1 + 1;
後置きの場合にはインクリメント演算子による演算以外の処理を先に行います。つまり var2 = var1
がまず行われるということです。その為、変数 var2 には 1 を増加させる前の 8 が格納されます。そして最後にインクリメント演算子の演算が行われるため変数 var1 の値が 1 だけ増加されます。
では次に前置きの例を見てみます。
int var1 = 8; int var2; var2 = ++var1;
上記の場合は変数 var2 には 9 が格納されます。前置きの場合には次のように記述した場合と同じです。
int var1 = 8; int var2; var1 = var1 + 1; var2 = var1;
前置きの場合にはインクリメント演算子による演算をまず先に行います。つまり var1 = var1 + 1
がまず行われるということです。そしてインクリメント演算子以外の処理が行われます。この時点で変数 var1 は 1 増加していますので変数 var2 には 9 が格納されることになります。
デクリメント演算子の場合も同様で前置きの --変数
の場合にはまず 1 だけ減算する処理が行われるのに対して、後置きの 変数--
の場合には他の処理が行われてから減算の処理が行われます。
前置きと後置きでは単独で実行した場合には同じ結果となりますが、インクリメント演算子やデクリメント演算子と他の処理を組み合わせて使う場合には前置きと後置きで結果が異なることがありますので注意して下さい。
※ インクリメント演算子とデクリメント演算子については「インクリメント演算子とデクリメント演算子」を参照されてください。
それでは簡単なサンプルを作成します。
#include <stdio.h> int main(void){ int num1 = 8; int num2; printf("num1 = %d\n", num1); num2 = num1++; printf("num1 = %d\n", num1); printf("num2 = %d\n", num2); printf("----\n"); num1 = 8; printf("num1 = %d\n", num1); num2 = ++num1; printf("num1 = %d\n", num1); printf("num2 = %d\n", num2); return 0; }
テキストエディタでプログラムを記述したあと sample.c という名前で保存します。(文字コードは UTF-8(BOM付き) です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで最初にコンパイルを行います。
cl sample.c
コンパイルが終わりましたら、次のように実行してください。
sample
最初は前置きのインクリメント演算子を使った場合、 2 つ目は後置きのインクリメント演算子を使った場合です。
-- --
C 言語のインクリメント演算子とデクリメント演算子に対する前置きと後置きの違いについて解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。