pointers
&の違いをたくさん読んでくださいreferences
。
これが私が学んだことの簡単な説明です。
1。ポインタが定義されると、メモリが割り当てられます。ただし、参照は名前エイリアスであるため、メモリは割り当てられません(Is it correct?
)。
2。参照は定数ポインタで実装されているため、他のオブジェクトを指すようにすることができないため、参照は定義時に初期化されるようにバインドされています。ただし、ポインタは定義時に初期化する必要がないため、他のオブジェクトを指すように変更することもできます。
3。参照は自動的に参照解除されます。あなたが書くときcout << p
; コンパイラによって自動的に参照解除され、cout << *p
;として扱われます。コンパイラによって。
ここで、pは参照です。
参照への参照はできません。参照への参照を宣言するときはいつでも、実際には同じ変数への参照です。例えば
int i; int &r1=i; int &r2=r1; <-------------------2
コンパイラーはステートメント2を次のように解釈します
。int&r2 =(* r1)
および(* r1)は変数i自体に他なりません。
ただし、ポインタへのポインタは可能です。
5。ポインタの配列は可能ですが、参照の配列は不可能です(なぜですか?)。
6。ポインタのアドレスが可能です。参照先住所はご利用いただけません。変数のアドレスを示します。
7。参照を使用しなければならない状況があります。そこではポインタを使用できません。以下の例を考えてみましょう。
A a = b + c;
ここで、a、b、cはクラスAのオブジェクトです。演算子「+」は次のようにオーバーロードされます。
const A& operator+(const A& o)
{
return A(i+o.i);
}
こちらのサンプルコードを参照してください:http: //ideone.com/Q0pE1
ここでは、引数リストの参照を使用してメモリフットプリントを保存しています。
演算子関数でオブジェクトのアドレスを渡す必要があるため、引数リストでポインタを使用することはできません。
A a =&b +&c;
ただし、パラメータリストでポインタが使用されている場合は、オブジェクト自体ではなくアドレスを追加することになります。
私が見逃している他のポイントはありますか?
いつポインターに行くべきですか、そしていつ参照するべきですか?