[ create a new paste ] login | about

Link: http://codepad.org/Z3FTfqC4    [ raw code | fork ]

Plain Text, pasted on Jun 5:
// アドレスの話 -----------------------------------------------------------------------------------

あと、ここで言っている「アドレス」と言う言葉が指す物は実は曖昧で、
ここには2つの意味でアドレスと言う言葉が登場している。

俺は明示的に「アドレスと言う unsigned の整数値」と意図的に長ったらしい書き方を
しているが、これ。 以下のメモリイメージと照らしあわすと、多分クリアになる。

 int a = 123;	// 大元
 int *p = &a;	// a のアドレスをコピーしたポインタ型変数
 int &r = a;	// a の参照(エイリアス)


 ※あくまでイメージとしてのメモリマップ。例なので 8bitCPU(16bitアドレス空間)で表記

 A000 06 A1	// 変数 a  A106 に実体があるよ
 A002 07 A1	// 変数 p  A107 に実体があるよ
 A004 06 A1	// 変数 r  A106 に実体があるよ

  ↓「 = &変数」で取得される『アドレス』はこの部分
 A106 7B 00	// 0078 = 10進数で 123
 A108 06 A1	// A106 というただの値
    ^^^^^ ← ポインタ型変数が持っている『アドレスとして使われる unsigned 整数値』はこれ


「参照」の時、上表で言うと a と r は同じ A106 に実体があるよ、で、
「ポインタ型変数」の時、それは「別の変数で」「別の値を保持しているから」別のアドレス


これは、

 int *p = &a;

でも、

 void foo(int *p) に対して
 
 int a;
 foo(&a);
 
でも同じ事



Create a new paste based on this one


Comments: