2

私は違いのb / wポインタ変数と参照変数がC ++でここにあるものを読んでいました。私はそれからポイントを得ましたが、参照は同じメモリアドレスを共有しますが、スタック上のスペースも占有します。. 同じアドレス空間を共有するということはどういう意味ですか.参照がc ++でどのように実装されているかを明確にしてください.

4

2 に答える 2

9

それはやや紛らわしい言葉遣いの答えです。しかし、それはかなり単純なことを意味します。スタックスペースの占有に関する部分は、参照が実際にメモリを占有することを意味します。つまり、ポインターと同じ量のメモリを占有します (そして、[私が認識している] すべての C++ 実装では、実際のポインターを使用して実装されています)。

「同じメモリアドレスを共有する」という部分は、参照が独立してアドレス指定できる値ではないことを意味します。何かへのポインターがある場合、そのポインターのアドレスを取得すると、何かへのポインターへのポインターになる可能性があります。しかし、何かへの参照がある場合、その参照のアドレスを取得することはできません。そうしようとすると、実際に参照されているもののアドレスが取得されます。それが彼が「同じメモリアドレスを共有する」という意味です。

于 2012-08-22T08:55:32.000 に答える
2

大雑把に言えば、参照変数はポインターのようには見えないポインター変数のようなものです (つまり、コンテンツにアクセスするためのポインター構文はありません)。スタックやヒープとは関係ありません。

int i = 5; // integer on the Stack
int * j = new int (5); // integer on the Heap (accessible through pointer, naturally)

int & iref = i; // reference to integer on the Stack
int & jref = *j; // reference to integer on the Heap

int * ipointer = & i; // pointer to integer on the Stack
int * jpointer = j; // pointer to integer on the Heap
于 2012-08-22T08:55:50.643 に答える