// アドレスの話 -----------------------------------------------------------------------------------
あと、ここで言っている「アドレス」と言う言葉が指す物は実は曖昧で、
ここには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);
でも同じ事