C/C++における前置インクリメント(++x)と後置インクリメント(x++)の違いを徹底解説
CやC++には、変数の値を1つ増やす「インクリメント演算子」が2種類あります。それが前置インクリメント(++x)と後置インクリメント(x++)です。どちらも変数の値を+1するという点では同じですが、動作のタイミングに重要な違いがあります。
前置インクリメントと後置インクリメントの基本的な違い
前置インクリメント(++x)は、まず変数の値を1つ増やしてから、その新しい値を他の変数に代入します。
一方、後置インクリメント(x++)は、先に現在の値を他の変数に代入し、その後に値を1つ増やします。
この「増やすタイミング」の違いにより、代入結果が大きく変わるため、コードを書く際には注意が必要です。
サンプルコード
#include<iostream>
using namespace std;
int main() {
int x, y, z;
x = 10;
y = 10;
z = ++x; // 先にxが11になり、その値がzに代入される
cout << "Z: " << z << endl;
z = y++; // 先にyの元の値10がzに代入され、その後yが11になる
cout << "Z: " << z << " and y is: " << y << endl;
return 0;
}
実行結果
Z: 11 Z: 10 and y is: 11
実行結果の解説
z = ++x; の場合、xは代入前に11へと増加するため、zには11が格納されます。
一方 z = y++; の場合、yの元の値である10が先にzへ代入され、その後でyが11になります。そのため、出力時点では「zは10、yは11」という結果になります。
優先順位と結合規則の違い
前置インクリメントと後置インクリメントは、演算子の優先順位も結合規則も異なります。
- 優先順位: 後置インクリメントの方が前置インクリメントよりも高い優先順位を持ちます。
- 結合規則: 前置インクリメントは「右から左」、後置インクリメントは「左から右」に結合します。
これらの違いを理解しておくと、複雑な式の中でインクリメントを使う際に、意図しない動作を防ぐことができます。特にループ処理やポインタ操作では頻繁に登場するため、しっかりと押さえておきましょう。
-
C/C++のisblank()関数とは?使い方とサンプルコードを徹底解説
isblank()関数は、引数として渡された文字が空白文字であるかどうかを判定するために使用される標準ライブラリ関数です。ここでいう空白文字とは、半角スペース( )のほかに、タブ文字(\t)も含まれます。なお、改行文字(\n)などは空白文字として扱われない点に注意してください。 この関数は、C言語では「ctype.h」ヘッダーファイル、C++では「cctype」ヘッダーファイルで宣言されています。 isblank()の構文 C++におけるisblank()関数の構文は以下の通りです。 int isblank(int char); 引数には判定対象の文字を渡し、その文字が空白文字であれば0以外の
-
【C/C++】strdup()とstrndup()で文字列を複製する方法を徹底解説
strdup()関数とはstrdup()関数は、文字列を複製(コピー)するために使用される関数です。引数として渡された文字列と同じ内容の新しいメモリ領域を確保し、NULL終端されたバイト文字列へのポインタを返します。なお、strdup()はPOSIXで定義されている関数であり、厳密にはC標準ライブラリには含まれません。内部ではmalloc()を使ってメモリを動的に確保するため、使い終わったらfree()で解放する必要がある点に注意しましょう。また、メモリ確保に失敗した場合はNULLが返されます。C言語におけるstrdup()の構文は以下の通りです。char *strdup(const char