C言語の++iとi++の違いを徹底解説!前置き・後置きインクリメントの挙動
C言語におけるインクリメント演算子(++)とデクリメント演算子(--)
C言語では、++ は「インクリメント演算子」、-- は「デクリメント演算子」と呼ばれます。これらは1つのオペランド(被演算子)だけを必要とする単項演算子です。
そのため、演算子をオペランドの前(前置き)にも後ろ(後置き)にも置くことができます。つまり、i++ と ++i は、単独で使用した場合には同じ効果を持ちます。
単独で使う場合:どちらも結果は同じ
i = 5;
i++;
printf("%d", i);上記のコードと、次のコードはどちらも同じ結果になります。
i = 5;
++i;
printf("%d", i);いずれの場合も、実行後の i の値は 6 になります。
代入演算子と組み合わせたときに違いが現れる
しかし、インクリメント式を代入演算子(=)と組み合わせて使うと、演算子の優先順位が関係してくるため、両者に明確な違いが生じます。
後置きインクリメント(i++)の場合
i = 5; j = i++;
この場合、代入演算子 = の優先順位は後置きの ++ よりも高いため、まず i の値が j に代入され、その後に i がインクリメントされます。結果として、j は 5、i は 6 になります。
前置きインクリメント(++i)の場合
i = 5; j = ++i;
一方この場合、前置きの ++ の優先順位は = よりも高いため、先に i がインクリメントされ、その増加後の値が j に代入されます。結果として、i も j も 6 になります。
実際に動作を確認できるサンプルコード
以下のプログラムで、前置きと後置きの違いを実際に確認できます。
#include <stdio.h>
int main() {
int i = 5, j;
j = i++; /* 後置きインクリメント */
printf("\nafter postfix increment i=%d j=%d", i, j);
i = 5;
j = ++i; /* 前置きインクリメント */
printf("\nafter prefix increment i=%d j=%d", i, j);
return 0;
}実行結果
after postfix increment i=6 j=5 after prefix increment i=6 j=6
まとめ
- 単独で使用する場合:
i++と++iは同じく値を1増やすだけなので、違いはありません。 - 代入など他の式の中で使用する場合:後置き(
i++)は「元の値を使ってから増やす」、前置き(++i)は「先に増やしてから新しい値を使う」という違いがあります。
この挙動の違いを理解しておくことは、C言語での意図しないバグを防ぐために非常に重要です。
-
DirectX11とDirectX12の違いを徹底解説!ゲーマーが知っておくべきポイント
DirectXは、ソフトウェアがマルチメディアコンテンツを描画し、グラフィックハードウェアと通信するために使用されるAPI(アプリケーションプログラミングインターフェース)のコレクションです。DirectXの主要な構成要素であるDirect3Dは、ソフトウェアとグラフィックスハードウェア間の通信を担っています。ハードウェアは製品ごとに異なるため、標準化された関数や呼び出しのライブラリを通じてグラフィックカードと通信することで、ゲーム開発を大幅にスピードアップできます。これは「ハードウェア抽象化」と呼ばれ、APIの最も重要な役割となっています。車に例えてみましょう。1台の車の運転ができれば、ほぼ
-
C#のインターフェイスとクラスの違いとは?わかりやすく解説
C#におけるインターフェイスは、フィールドやメソッドの実装を持たない「宣言のみ」の型です。つまり、自分で定義したメソッドの中身(処理内容)を実装することはできません。一方、クラスは通常、インターフェイスで宣言されたメソッドを実際に実装する役割を担います。インターフェイスとはインターフェイスは、プロパティ・メソッド・イベントといったメンバーを定義しますが、含まれるのは宣言のみです。各メンバーの具体的な処理をどう実装するかは、そのインターフェイスを実装する派生クラスの責任となります。C#ではクラスの多重継承がサポートされていないため、代わりに複数のインターフェイスを実装することで、異なる機能を柔軟