前置きと後置き
インクリメント演算子とデクリメント演算子には、それぞれ前置きと後置きの二種類が存在します。
インクリメント演算子の前置きと後置きは次のようになります。
前置き: ++変数 後置き: 変数++
デクリメント演算子の前置きと後置きは次のようになります。
前置き: --変数 後置き: 変数--
前のページで使った演算子は後置きのインクリメント演算子です。前置きも後置きもどちらも変数の値を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」が増加されます。
では次に前置きの例を見てみます。
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 var1 = 8; int var2; int var3 = 8; int var4; printf("var1 = %d¥n", var1); var2 = var1++; printf("var1 = %d¥n", var1); printf("var2 = %d¥n", var2); printf("var3 = %d¥n", var3); var4 = ++var3; printf("var3 = %d¥n", var3); printf("var4 = %d¥n", var4); return 0; }
上記を「test4-1.c」の名前で保存します。まずコンパイルを行います。
コンパイルが終わりましたら「test4-1」と入力して実行します。
前置きと後置きで結果が異なることが確認頂けると思います。
( Written by Tatsuo Ikura )