何故ポインタは変数の型情報が必要なのか

とらのかいでよい質問がされたので答えてみる。


ポインタは変数のアドレスを格納する変数の事。
アドレスは32bitのOSならば4byteで表現でき、
当然それの値を格納するポインタも4byte。
元の変数の型が違ってもすべて4byte。
なら何故、アドレス型とかにしないのか。
アドレスを格納するのに、何故変数の型まで必要なのか?


配列をポインタで利用してみる場合を考えてみるとわかりやすいかも。
int型の配列を辿る時には4バイトずつ、
double型の配列を辿る時には8バイトずつ辿らなくてはいけないわけです。(32ビットOSでは)
ところが、元の型情報が無いと、何バイトずつ辿っていいか分かりませんね。


と、まぁこんな感じで、アドレスがしめす元の変数を参照する時、変数の型情報が無いとダメなのです。
よって、アドレス型ではなく、ポインタというものがあるんです。


えーと、それっぽく語ってますけど、間違ってるところがあったら教えてください。