HOWTO · C++
C++ の参照演算子
C++ での参照演算子(&)の使用法を学びます。
このページの内容
この記事では、アドレス演算子とも呼ばれる参照演算子&に焦点を当てます。
参照演算子は複数の場合で同様に機能しますが、さまざまなプログラミング言語間でほとんど違いはありません。C++ プログラミング言語での使用のみに焦点を当てます。
まず、その基本的な構文と概念を学習します。次に、さまざまなコンテキストでの参照演算子の使用に関する一般的な混乱に答えます。
C++ で参照演算子を使用する
参照変数を宣言する構文:
int &ref = m;
int & ref = m;
int& ref = m;
&演算子は、使用されるコンテキストに応じてさまざまな使用法と意味を持ちます。次のセクションでは、参照演算子が C++ で実行するタスクについて説明します。
例:
// Simple integer type variable intialization
int m = 12;
// ref is a reference to m
int& ref = m;
// Print value of m
cout << "Original m = " << m << endl;
ref = 20;
// Print value of ref
cout << "Modified m = " << m << endl;
上記のコードでは、変数 m に 12 を格納しました。次に、参照演算子を使用して、ref を m にポイントしました。
ここで、ポインティングとは、ref が m 変数のメモリアドレスを持っていることを意味します。したがって、m の値を更新すると、参照変数である ref 変数を介して同じ更新値が取得されます。
つまり、ref 変数は別の変数 m のエイリアスになりました。ref は、m という名前の実際の変数の単なる別名であるとも言えます。
上記のコードスニペットでは、ref に 20 を割り当てました。この変更は、更新された値が 20 の m でも表示されます。
出力:
Original m = 12
Modified m = 20
C++ の参照変数とポインター変数を比較する
通常、学習者は参照変数とポインター変数を混同します。
前のセクションでは、例を使用して参照変数について詳しく説明しました。
定義するために、ポインタ変数は変数のアドレスをメモリに格納します。参照演算子を使用して、その値を初期化または定義します。
ポインタ変数での&の使用法を理解するには、以下のコードを参照してください。次に、違いについて説明します。
// Integer type variable intialization
int number = 88;
// Declare a pointer variable
int* ptrNumber;
// Assign the address of the "number" to "ptrNumnber"
ptrNumber = &number;
// Declare another int pointer and initialize it with the address of the number
int* pAnother = &number;
このコードでは、最初にポインター変数 ptrNumber を宣言し、次に 3 番目のステートメントで number のアドレスを割り当てました。ここで、&は address of 演算子として機能し、number のメモリアドレスを返します。これは、ポインタ ptrNumber に割り当てられます。
上記のスニペットの最後のステートメントは、宣言時に number のアドレスを別のポインターpAnother に割り当てます。ポインター変数は参照変数とは異なることに注意することが重要です。
以下の表を使用して、違いを見てみましょう。
| ポインタ変数 | 参照変数 |
|---|---|
| ポインタは変数のメモリアドレスを保持します。 | 参照変数は、別の変数のエイリアスです。 |
間接演算子*は、ポインターを間接参照するために使用されます。 |
参照変数は定数ポインターであり、間接参照する必要はありません。 |
| さまざまなアイテムを参照するように再割り当てできます。 | 初期化時に割り当てる必要があり、一度形成されたアドレス値は変更できません。 |
| NULL 値をポインタ変数に直接割り当てることができます。 | NULL 値を直接設定することはできません。 |
&演算子を関数の仮パラメーターと一緒に使用すると、それらは参照パラメーターになります。参照パラメータと値パラメータの詳細については、こちらをご覧ください。