Object identity としてのポインタ

hyuki (2007-08-20 (月) 06:23)
ポインタは「オブジェクト」を実装しようとしたところで重要性に気づきますね。アイデンティティとしてのポインタ。

オブジェクトを識別するのに参照用の値を使うことが便利なのは分かるけど、ポインタは本来参照するためのものであって、識別するためのものではないんじゃないかな。極端な話、すべての(もしくはある集合中に含まれる)オブジェクトにユニークな番号が振れればいいわけだし。
あと、構造体とか配列になると、別々の変数の参照が同じアドレスを指していたり。

#include <stdio.h>

#define PUTS_BOOL(b) puts((b) ? "true" : "false")

struct foo {
    int a;
};

int main(void)
{
    int a[10];
    struct foo f;

    PUTS_BOOL(&a == &a[0]);
    PUTS_BOOL(&f == &f.a);

    return 0;
}

まぁ、警告が出るけど。