次のコードでは、 cplusplus.comの読み取りに基づいて、ポインターに関する基本的な理解をテストしようとしています。
#include <iostream>
using namespace std;
int main() {
int foo, *bar, fubar;
foo = 81;
bar = &foo;
fubar = *bar;
cout << "the value of foo is " << foo << endl;
cout << "the value of &foo is " << &foo << endl;
cout << "the value of bar is " << bar << endl;
cout << "the value of *bar is " << *bar << endl;
cout << "the value of fubar is " << fubar << endl;
cin.get();
}
それは出力につながります:
the value of foo is 81
the value of &foo is xx
the value of bar is xx
the value of *bar is 81
the value of fubar is 81
xx
ランタイムごとに変化する長い数値はどこにありますか。以下を追加すると:
cout << "the address of foo is " << &foo << endl;
cout << "the address of fubar is " << &fubar << endl;
それは次のことにつながります。
the address of foo is xx
the address of fubar is xy
実行時とはどこxy
が異なりますかxx
。
質問 1 : 宣言では、宣言は、それが使用されるまで、つまりどの時点で逆参照された変数になる
*bar
まで、その時点でそれを「ポインター」にしますか?fubar = *bar
それとも、ポインターは常に変数であり、それは私がすべてのヌービーを取得し、(おそらく正しくない) セマンティクスに縛られているだけですか?質問 2 :
xx
はランタイムごとに変化する長い数値なので、アドレス空間であるというのは正しいですか?質問 3
fubar
:とfoo
は同じ値を持ちますが、それらは完全に独立しており、共通のアドレス空間を持たないと考えるのは正しいですか?