\r\n\r\n
ポインタと参照の違いを説明する前に、この2つの用語の意味について簡単に見ておきましょう。プログラムでは、データがメモリを占有しています。データにアクセスするためには、そのデータが実行時にメモリ上のどこに配置されているかを正確に把握する必要がある。このデータにアクセスし、そのデータがあるメモリアドレスを操作するために、ポインタ変数や参照変数が使われる。つまり、ポインタもリファレンスも、間接的にオブジェクトを参照するために使用することができます。これらは、基本的にメモリアドレスを値として受け取ります。ポインタと参照の重要な違いは、ポインタは他の変数のメモリ位置のアドレスを格納する変数であるのに対し、参照は他の変数を参照する変数であることです。ポインタと参照という2つの機構は、構文や使い方が異なる。
ポインターは、計算機上で値のメモリアドレスを格納するプログラミング言語のオブジェクトです。
積分値i=5。
int*ptr=&i.
最初の行は、値5で初期化された変数を定義しています。2行目は、変数のメモリアドレスへのポインタを定義しています。ここで、"ptr "は "intへのポインタ "型のオブジェクトとして宣言され、その初期値はオブジェクトiのアドレスとなります。事実上、ptr変数はそのメモリアドレスを格納することでiを指しています。
メモリ位置に格納された値を取得することをデリファレンスと呼ぶ。ポインタのデリファレンスには*演算子を使用し、参照式ptrの後の間接参照は、*演算子を使用する。
iの値を変更するには、次のような代入が可能である。
*ptr=20.
ポインターは、別のオブジェクトを参照するために再割り当てすることもできます。
ヌルポインターは、ポインターの特殊なタイプです。ヌルポインターは通常0またはヌルで表され、ゼロを指します。ポインタがNULLに指定されていない場合、そのポインタを代入します。この代入は、論理演算や条件に使用することができます。
ポインターは、動的に割り当てられたメモリのアドレスを保存し、管理するために使用することができます。データ構造(スタック、キュー、リストなど)は、ポインタを用いて効率的に実装・制御することができます。例えば、待ち行列はヘッドポインタとテールポインタの2つのポインタを持つことができる。ポインターは、変数をそのアドレスで渡して、値を変更できるようにするために使用することもできます。メモリやメモリマップドデバイスの直接操作は、ポインタを使用することでも対応可能です。
ポインターは、アドレス指定されたメモリへの保護されたアクセスと保護されていないアクセスの両方を可能にします。したがって、ポインタの内容が有効であることを確認するために、必要な予防措置を講じる必要があります。さもなければ、無効なメモリーアドレスのポインターをデリファレンスすると、プログラムがクラッシュする可能性があります。
ポインタは、C、C++、Pascalなどの言語や多くのアセンブリ言語でサポートされています。
変数bに関連するメモリアドレスへのポインタa。
参照とは、簡単に言えば、メモリに保存されている値の代替識別子で、プログラムが特定のデータに間接的にアクセスすることを可能にするものです。
積分値i=5。
int&ref=i.
最初の行は、値5で初期化された変数を定義しています。2行目は,'ref'をiの'intへの参照'型のオブジェクトへの参照として宣言している.参照は、メモリに格納されている特定のデータの物理アドレスとして実装されている場合、データそのものとは異なります。
一度定義された参照は、新しい値を割り当てることができません。参照は常に、それを初期化したオブジェクトを参照します。次の代入では、refはまだiを参照していますが、値は20になっています。
基準値=20。
上記の例によると、参照の参照解除に演算子は必要ない。
参照は、変数が常にオブジェクトを参照している場合に使用することができます。これは、ポインタと異なり、参照はNULLにできないため、初期化時に必ず値を代入しなければならないからです。参照は常にオブジェクトを参照しなければならないので、このような変数を参照として使用することで、プログラムが効率的かつ正しく動作することが保証されます。ヌル参照でなければ、参照される変数の妥当性をテストする必要はない。
参照変数を使うと、ビッグデータをプロシージャのパラメータとして効率的に渡すことができる。参照は、各コードがデータへの参照を保持するため、異なるコード領域間でビッグデータを共有する場合にも使用される。
C++、java、python、perl、php、Rubyなどのプログラミング言語がリファレンスでサポートされています。
ポインター:計算機メモリーに格納されているオブジェクトのメモリーアドレスです。
参照:参照とは、オブジェクトの代替識別子または別名のことである。
ポインター:*演算子でポインターを宣言する。
参照:&演算子を使って参照を宣言する。
ポインター:ポインター変数には * 演算子の再参照が必要です。
参照:変数の参照には、デリファレンス演算子は必要ありません。
ポインタ:ポインタはNULLで初期化することができる。このような変数をNULLポインタと呼ぶ。
参照:参照をNULLで初期化することはできません。NULL参照はできません。
ポインター:ポインター変数は、異なるオブジェクトを参照するために再割り当てすることができます。
参照:参照変数は再代入不可。常に初期化したオブジェクトを参照する。
ポインタ:ポインタ変数は、何かを参照する可能性がない場合、あるいは異なるオブジェクトを異なるタイミングで参照する必要がある場合に使用する必要があります。
参照:参照変数は、参照すべきオブジェクトが常に存在し、参照変数を使用しているオブジェクト以外のオブジェクトを参照する必要がない場合に使用されるべきである。
ポインタとポインタは、データ構造の実装に使用できます。
参照:関数のパラメータや戻り値の型に参照変数を使用することで、便利なインターフェースを定義することができます。
ポインタ:C、C++、Pascalなどのプログラミング言語や多くのアセンブリ言語がポインタをサポートしています。
参考:C++、java、python、perl、php、Rubyなどのプログラミング言語が参考としてサポートされています。
Image Courtesy: “Pointers” by This file was made by User:SvenTranslation.Own work.This vector image was created with Inkscape.(CC BY-SA 3.0) via Comm*** –