
比較表
比較基準 | ポインタ | 参照 |
---|---|---|
基本 | ポインタは変数のメモリアドレスです。 | 参照は変数の別名です。 |
返品 | ポインター変数は、ポインター記号 '*'が前に付いた、ポインター変数に格納されているアドレスにある値を返します。 | 参照変数は、参照記号 '&'が前に付いた変数のアドレスを返します。 |
オペレータ | *、 - > | & |
NULL参照 | ポインタ変数はNULLを参照できます。 | 参照変数はNULLを参照できません。 |
初期化 | 未初期化ポインタを作成することができます。 | 未初期化参照は作成できません。 |
初期化の時期 | ポインタ変数はプログラム内の任意の時点で初期化できます。 | 参照変数は作成時にのみ初期化できます。 |
再初期化 | ポインタ変数は必要に応じて何度でも再初期化できます。 | 参照変数は、プログラム内で再度初期化することはできません。 |
ポインタの定義
「ポインタ」は、他の変数のメモリ位置を保持する変数です。 ポインター変数で使用される演算子は*および - >です。 ポインター変数の宣言には、基本データ・タイプの後に '*'記号と変数名が続きます。
type * var_name;
例を使ってポインタを理解しましょう。
int a = 4; int * ptr =&a; cout <ここでは、整数変数aと、変数aのアドレスを格納するポインタ変数ptrがあります。
ポインタ演算
ポインタ変数は、「加算」と「減算」の2つの算術演算子で操作できます。 加算は「増分」と呼ばれ、減算は「減分」と呼ばれる。 ポインタ変数がインクリメントされると、その基本型の次の変数のメモリ位置を指します。 ポインタ変数がデクリメントされると、その基本型の前の変数のメモリ位置を指します。 したがって、ポインタ変数によって配列に効率的にアクセスできます。
多重インダイレクション
ポインタは、ターゲット値を指しているもう一方のポインタ変数を指しています。 この種のポインタは、常に別のポインタ変数のアドレスで初期化されます。 ポインタへのポインタの宣言は以下の通りです。
タイプ** var_name;例を挙げて勉強しましょう。
int a = 4; int * ptr1 =&a; int ** ptr2 =&ptr1; cout <関数ポインタ
関数は変数ではないことを私たちは知っているので、それでもポインタ変数に割り当てることができるメモリ位置を持っています。 ポインタが関数を指すと、その関数ポインタでその関数を呼び出すことができます。
ポインタについて覚えておくべき重要なポイント。
- ポインタ変数は初期化せずに作成でき、プログラム内の任意の場所で初期化できます。
- ポインタ変数は別の変数に再初期化できます。
- ポインタ変数はNULLを参照できます。
参照の定義
参照変数は、その参照変数に割り当てられている変数を指すために使用されます。 参照変数によって使用される演算子は '&'です。 参照変数の宣言には、基本型とそれに続く「&」記号、それから変数名が含まれます。
type&refer_var_name = var_name;ここで、型はデータ型であり、&演算子はそれが参照変数であることを確認します。 refer_var_nameは参照変数の名前です。 var_nameは、参照変数に参照させたい変数の名前です。
例を用いて参照変数を理解しましょう。
int a = 4; int&b = a; // bはab = 6を表します。 //今a = 6ここで、int型の変数には値4が割り当てられています。参照変数には変数aが割り当てられています。つまり、bはaの別名です。 今度は、bに別の値を代入するときに、aの値を変更します。 したがって、参照変数に対して行われた変更は、その参照変数によって参照される変数にも発生すると言えます。
最も重要な点は、参照変数は作成時に初期化する必要があるということです。参照変数は変数で初期化されるため、別の変数を参照するために再初期化することはできません。 値を参照変数に代入した瞬間に、その値を参照変数が指す変数に代入します。 参照変数はNULLを参照できません。 参照変数に対して算術演算を実行することはできません。
参照変数は3つの方法で使用できます。
- 関数の戻り値として
- 関数パラメータとして
- 独立した参照として。
ポインタと参照の主な違い
- 参照は、変数を参照するために別の名前を作成して別の名前で参照できるようにするのと同じです。 一方、ポインタは単に変数のメモリアドレスです。
- ポインタ変数の前に '*'があると、そのアドレスが可変長ポインタに格納されている変数の値を返します。 参照変数の前に&を付けると、その変数のアドレスを返します。
- ポインタ演算子は*と - >ですが、参照演算子は&です。
- ポインタ変数がnullを指す変数のアドレスを保持していない場合。 一方、参照変数はNullを参照できません。
- あなたはいつでも統一されたポインタ変数を作成することができます、しかし我々があなたが決して統一された参照を作成することができないように我々がある変数の別名が必要なとき参照を作成します。
- ポインタを再初期化することはできますが、一度初期化した後は再び初期化することはできません。
- 空のポインタを作成していつでも初期化できますが、参照を作成するときにのみrefrenceを初期化する必要があります。
注意:
Javaはポインターをサポートしません。
結論
ポインターと参照の両方は、別の変数を指すか参照するために使用されます。 しかし、どちらも使い方と実装が異なります。