はじめに識別子ありき

新人研修を担当していてC言語を教えている。
次回関数の使い方にあわせポインタを教えることにしている。
そこで思ったことをちょっと書いておく。


ポインタの説明をするときにいろんな人がいろんな表現をする。
それがわかっていない人にとっては混乱の元になっているかもしれない。
わかっている人同士では、ああそういうとらえ方もあるなーとおもう。

自分の場合ポインタを扱っているとどうしてもオブジェクトの名前を操作している感じがする。
アドレス演算子&は名前を剥ぎ取り新しい名前を付ける。
間接参照演算子*は実体を手繰り寄せる。


これに関して思い起こすのは「はじめに言葉ありき」だ。
「萬の物これに由りて成り、成りたる物に一つとしてこれによらで成るはなし」
と続く。つまり、物はすべて言葉による名前がついて初めて物たりうる、
というわけだ。言葉=名前がなければ物は存在しないに等しいと聖書に書かれているのです。


東洋にも諱、忌み名という考えがあり、本当の名前は祝福にも呪いにも通じるものらしい。
そういえば千と千尋の神隠しで、ユバーバ(湯婆婆なんだろうな)はノートに千尋の名前を
書いていてそれが千に変わっていったけどあれで千尋を縛っていたのかな。
DeathNoteでも本当の名前が必要だし、名前には魔力が宿っているかもね。


閑話休題
プログラムにこれを当てはめてみると
「はじめに識別子ありき」となる。
「すべてのオブジェクトは識別子よって操作され、
一つとして識別子を持たぬオブジェクトはなし」


正確にいえば名無しオブジェクトをサポートしている言語もある。
しかしそれはその場限りの使い捨てのオブジェクトであり、
実装がどうなのかはわからないがヒープではなくスタックに積まれている
ようなきがする。
C言語では名無しオブジェクトとなればそれすなわちメモリリーク


コーディングするとたぶんこんな感じか。

    int chihiro;
    int *sen;
    int *kao_nashi;

    sen = &chihiro;
    kao_nashi = malloc(100);
    kao_nashi = NULL;   /* メモリリーク! */