ISLe さんが書きました: ↑4年前
そこで疑問が…
「ポインタはアドレスだ」ってどういうことすか。
(1)「ポインタはアドレスだ」
(2)「ポインタは変数だ」
(3)「ポインタは型だ」
(4)「int は整数だ」
(5)「int は変数だ」
(6)「int は型だ」
(3) と (6) は誰でも正しいと思うのではありませんか?
(5) は変だと思いますよね。
int i = 3; という宣言があった時、
・i は int で、変数です。
・3 は int ですが、変数ではありません。定数です。
・i + 5 は int ですが、変数ではありません。+演算子の式です。
変数でない int があるのです。int は型ですから。
(2) も同じです。
int i = 3; int *p = &i; という宣言があったとします。
・p はポインタで、変数です。
・&i はポインタですが、変数ではありません。単項&演算子による式です。
i が静的変数(グローバル変数、または static がついた変数)の場合、
&i を「アドレス定数」ということが規格書に記述されています。
・p + 5 はポインタですが、変数ではありません。+演算子の式です。
変数でないポインタもあるのです。ポインタは型ですから。
(4) は「int は型だが、その保持する値は整数だ」という意味では正しい。
もちろん個数が無数である数学の整数とは異なりますが。
(1) は「ポインタは型だが、その保持する値は(ある変数の)アドレスだ」と
言えます。関数のアドレスは今は考えないことにします。
アドレスとは何か、というのは規格書には記述されていないのですが、
メモリのどの位置かを表す値であるということは認識されていると思います。
ポインタはアドレスを値として保持しますが、さらにメモリのその位置に
どんな型のオブジェクトがあるのかを確定できます。
int へのポインタ、char へのポインタ、double へのポインタなど。
アドレスには、その位置に何があるかという情報がないのが
ポインタとは異なることです。
なお、初心者が「ポインタはアドレスだ」とどういう意味で言っているのかは
私にはわかりません。