ヒビノアワ: 変数についてどう説明するのがいいのだろうか
プログラミングをまったく知らない人に、どうやって説明するのかというプロセスに興味があるのですね。で、読んでいるとたいていの本で変数の説明として「箱」というメタファを出してくるのです。変数は箱のようなもので、Aという箱に数値を入れてうんぬん......。
私はセオリー通り(?)に変数を箱で覚えましたねぇ。元記事ではその後、話がポインタの話題になっているのですが、ここでは少し寄り道してみます。
「A」と書かれた箱があって、これには「123 と書かれたメモ」を放り込むことができます。これが変数 Aです。他にも「B」と書かれたコップと「C」と書かれた紙袋があって、それぞれに「200ccのミルク」と「300gの小麦粉」を入れることができます。これで変数 B と変数 C ができました。箱にはミルクを入れることはできませんし、紙袋にメモを放り込むこともできません*1。コップに入った「200ccのミルク」と「100ccのミルク」を足せますが、「200ccのミルク」と「123 と書かれたメモ」は足せません。この入れ物の違いが変数の型として説明できます。
次に本題のポインタです。「A」と書かれた箱はボブの机の上にあって、「B」と書かれたコップはメアリーが持っていて、「C」と書かれた紙袋は台所にあります。このように、どの変数がどの場所に在るのか、という情報をポインタとして説明できます。
ここで少し話を飛躍して、話を現実のメモリ空間に近づけてみます。「A」と書かれた箱はコインロッカーの1900番に入っています。この「コインロッカーの1900番」というのがポインタの値です。そしてこの「1900番」という値の書かれたメモを箱に入れて、コインロッカーの2200番に入れておきます。これが「Aへのポインタ」です。2200番のロッカーを開けると、変数「A」へのポインタ「1900番」と書かれた紙が入っています。そして、1900番のロッカーを開けると、ようやく変数「A」の実体である「123」を得ることができるというわけです。
ややこしい「変数Aのポインタへのポインタ」も同じ考え方でいけます。上の例で、更に「2200番」と書かれたメモを2300番のロッカーに入れてしまえばよいのです。そして、2300番→2200番→1900番と辿ることで変数Aを得ることができます。
…と、こんな説明でどうでしょうか?