> > 僕は「ヌルポは(必ずしも)ゼロでなくでもよさげじゃない?」みたいに解釈しました。
> たしかにそうですね。すいません。(英語力の無さがばれる……)
>
> > 以上は、C言語に関する話です。ABではどうなっているのでしょうか。
> ABのヌルポインタに関する規定は勿論わかりませんが、おそらく何も無いと思います。
> けれどWindowsでは0がヌルポインタですから、今のところ特に問題は無いといったところです。
> Cではコンパイル後がどうであれ、ソースコード上では常に0をヌルポインタとすることになっていますよね。
NULL(ヌル/ナル)とは元々の意味は「0」とか「無い」とか「無効」という意味
です。
http://dic.yahoo.co.jp/bin/dsearch?inde ... &pagenum=1
http://dic.yahoo.co.jp/bin/dsearch?p=nu ... &dname=1ss
で、初期化されていないメモリ領域に書き込むことは危険なので絶対にしては
いけません。
(強制終了することが多く、しない場合もありますがその場合は余計に危険)
ポインタ変数自体に数値を代入するのは結果的に指し示しているポインタ先を
書き換えているだけなのでOKです。
# ポインタ変数はポインタ変数用のメモリ領域が別に確保されています。
# なので、ポインタ変数(メモリ領域)へのポインタというのもあります。
メモリを動的確保した場合にmalloc()などが返すのは確保したメモリ領域の
ポインタで、このポインタは結局はただの数値に過ぎません。
(型は違いますが)
なので、この数値をポインタ変数に代入することでそのポインタ先を参照する
ことができるわけです。
# malloc()が&H12345678という数値を返してきた場合は&H12345678がその
# メモリ領域の先頭アドレスです。
# 0を代入した場合は指し示しているポインタが0なだけです。
あと、動的確保したメモリ領域がある場合、それを解放する際にアドレスが
必要になるので解放する前に書き換えることはしない方がいいです。
(その場合は別の変数にアドレスを一時的に退避させるとか...)
って、余計に分かりづらくなったかも。