' P '

whatever I will forget

C++ ポインタの初期化、Dereference等

初期化

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するよとコンパイラに明示的に伝えてあげるためです。