ポインタと参照の主な違いは、ポインタが他の変数のアドレスを保持する変数であるのに対し、参照は既に存在する変数にアクセスするための別名であることである。
C++は、C言語の拡張版です。
C++はC言語の拡張版であり、C言語のスーパーセットとも言われている。
強力な言語であり、プログラムを実装するために多くの機能を提供しながら、OSやデバイスドライバなどの様々なアプリケーションを構築するのに役立っている。
そのひとつが動的メモリ割り当て機能です。
動的メモリ割り当てに関連する概念として、ポインタと参照があります。
ポインターとは
ポインターは、他の変数のアドレスを格納する変数です。
言い換えれば、ポインターは、メモリ位置の直接のアドレスを格納します。
プログラマーはポインターを宣言してから、それを使ってメモリアドレスを格納する必要があります。
例えば、int *ptr とすると、ptr は整数のアドレスを保持するポインタであることがわかります。
このように、ptrは整数のアドレスを保持するポインターであることが説明されています。
また、 * マークは変数をポインターとして指定するものです。
ポインターを使うには、いくつかの手順があります。
まず、ポインターの変数を定義します。
次に、変数のアドレスをポインターに代入します。
最後に、プログラマーはその値にアクセスすることができる。
簡単な例を以下に示す。
図1:ポインタを使ったC++プログラム
変数’x’は値50を保持している。
ptrは整数へのポインタです。
リファレンスとは
リファレンスとは、既に存在する変数の別名です。
参照が変数で初期化された後、その変数を参照するために変数名または参照名を使用することが可能である。
通常、変数名は、その変数のメモリ上の位置を特定するのに役立つラベルです。
参照は、そのメモリ位置に付けられた第2のラベルと考えることができます。
したがって、プログラマーは変数名または参照を使用して、その変数の内容にアクセスすることができます。
int x = 50;
xの参照変数は次のようになります。
int& r = x;
変数xは整数データ型を格納でき、rはxで初期化された整数の参照です。
10行目は元の変数名xでxの値を表示し、11行目は参照rでxの値を表示しています。
ポインタとリファレンスの違い
定義
ポインターは、コンピュータのメモリにある別の値のメモリアドレスを格納するプログラミング言語のオブジェクトであり、参照は、すでに存在する変数のエイリアスまたは別の名前です。
これがポインタと参照の主な違いです。
機能性
ポインターはメモリ上の位置のアドレスを保持し、参照は既に存在する変数の別名です。
オペレーター
ポインタの演算子は * で、参照の演算子は & です。
NULL
NULLポインターはありえますが、NULL参照はありえません。
これもポインタと参照の違いです。
初期化
ポインターはいつでも初期化できますが、参照は作成時に初期化する必要があります。
変更点
ポインタと参照のもうひとつの違いは、「変更」です。
ポインターは、いつでも別のオブジェクトを指すことができます。
しかし、あるオブジェクトへの参照を初期化した後、それを他のオブジェクトを参照するように変更することはできません。
結論
ポインタと参照は、C++における動的メモリ割り当てに関連する2つの概念です。
ポインタと参照の主な違いは、ポインタが他の変数のアドレスを保持する変数であるのに対し、参照は既に存在する変数にアクセスするためのエイリアスであることです。