初期化
C++ 11からは、nullptr
が使える。
int *ptr {nullptr};
上記の場合は、ポインタはどこのアドレスもポイント(参照)していません。
まあ、ポインタはとりあえず絶対初期化しましょうねって感じです。 (ゴミデータが厄介になるため)
int test {100}; int *ptr {&test};
上記の場合はtest変数のアドレスを保持しつつ初期化です。
Dereference
上記のコードで、Dereference(間接参照)を行う場合は、
*ptr = 200;
みたいにします。
アスタリスクが重要です。
ポインタ変数にアスタリスクをつけることで、参照先の値を得ることができます!!
ポインタから値を変更した場合、test変数の値も200に変わります。(ptrポインタから、test変数のアドレスを参照しているため)
昔からよくわかっていないところ (06/13/2019追記)
int test {100}; int *ptr {&test}; std::cout << ptr << std::endl;
ってした時。いつも[*ptr]だとわかる。うんうんポインタだよね、と。
でもポインタでアスタリスク*が付かないとき、これなんやっけ?となるんです
答えは、そのポインタが参照しているアドレス。 (例だとtestのアドレス)
なので、ptr に 値は代入できません!!!!
ポインタの値に代入、または値を参照する場合は"*" dereferenceをしましょう!!!
vectorのdereference
Vectorだけ少し注意。
vector <int> vc {1,2,3}; vector <int> *ptr (&vc}; cout << (*ptr).at(0) << endl;
上記のように、(*ptr)
と括弧で囲ってあげることが必要です。
.が来る前に、dereferenceするよとコンパイラに明示的に伝えてあげるためです。