10/03/31 18:50:32
>>289
基本的な事と前置きがあり、たまに誤解して覚えてる人、また間違った説明をする人がいるので
念のためついでに書いておくと、 C/C++ には、例えば 「intのポインター"型"」 のような物は存在しない。これ重要。
あくまで、「int として扱われる、どこかのメモリ領域を指すポインタ」 であって、これは型じゃない。
つまり読み方として、その例は 「int*」 の 「p2」 でなく、「int」 の 「*p2」。
実際の用法については >>292 氏のレスを参照してもらうとして、老婆心だけどメモしておくと、
そもそも変数の宣言は、
int x;
とあったとき、最初の int は(例えば整数が32bitだとすると)、「intとして扱う、4バイトの領域」 という意味でしかなく、
まだこの瞬間には物理的にどこかのアドレスには何も確保されていない。 そして次に x と、変数名が来たとき、
どこかにメモリが4バイト分確保され、それをあらわす名前として x が割り当てられている、という動きになる。
これを踏まえて、
int *y;
は、最初の int で int として扱う4バイトの領域という型が宣言され、その次の * は、ワイルドカードの * と似た意味で、
「どこかのアドレス」 という意思を表している。 つまり int * だ。
で、しかしこれだけだと流石にその後扱えないので、その次でこれ自体に名前を求めている。これが y 。
そんな訳で、この例の場合、型としてはあくまで int。 そして変数として、それはポインタと宣言されているって意味の記述になるから、
int* z; ではなく、 int *z; でなければならない。 こんな基礎。