9

私はポインタと参照について学んでおり、私の質問はこの説明、特に次のセクションを参照しています。

int& ri = iこれは、宣言によって新しいメモリ セルが作成され、その値が&i未知のメモリ位置に存在することを示唆しています。

この理論をテストするために、私は簡単なケースを書きました。結果は以下のとおりです。

ここに画像の説明を入力

rと が同じメモリアドレスを持っているという事実に当惑していiますが、これは読み取り値と矛盾しているようです。結果は、int& ri = i大まかに「メモリセルのエイリアスを作成してi呼び出すr」ことを意味し、両方がまったく同じセルを参照することを示唆しています。

ドキュメントは正しいですか、それとも何か見落としがありますか?

4

5 に答える 5

11

rは への参照であるため、に対するiすべての操作rは、コンパイラによって に対する操作に変換されiます。そうする&rことで、メモリアドレスiが入っていることがわかります。

(ポインターとは異なり、参照は宣言後に「再参照」されないという特性を持っていることに注意してください。それらは常に同じものを参照します。 ')

于 2013-06-13T05:58:25.960 に答える
2

ドキュメントには、「pi と ri の両方に i の場所を指すアドレスが含まれていますが、式で使用される場合の参照とポインターの外観に違いがあります」と記載されていますが、これは事実です。

あなたは「[参照]は大まかに「メモリセルiのエイリアスを作成し、それをrと呼ぶ」ことを意味し、両方がまったく同じセルを参照する」と書きましたが、これも真実です。

あなたはおそらくドキュメントを誤解しているでしょう。あなたは正しく、ドキュメントもそうです。

于 2013-06-13T05:59:40.433 に答える
0

この SO 投稿が役立つと思います。そこに与えられた答えを引用する:

参照は暗黙のポインターです。基本的に、参照が指す値を変更できますが、参照を別のものに変更することはできません。

「メモリセル」の意味がわかりません。アセンブリ内のコードを見ると、行われている下位レベルのセマンティクスを理解するのに役立つ場合があります。Windows を使用しているように見えるので、興味があれば、アプリを ollyDbg で実行することをお勧めします。

私の見解 (そして私は非常に間違っている可能性があります) は、コンパイラは pi を可変ポインターとして扱い、ri は不変ポインターであるということです。

于 2013-06-13T06:03:55.470 に答える