>>32
一応FAQなんだけど、ポインタとして評価される文脈で字面の0が出てきたら、
それはNULLポインタとして扱われる。また、その文脈ではNULLポインタは
0として扱われる。

これはあくまでCとしての評価の話で、NULLポインタが実際にバイナリ0で
あるかどうかとは関係のない話なのだ。ただし、おれはNULLポインタを
バイナリ0以外にしている処理系は見たことがないが規格上は区別されてる。

ポインタとして扱われる文脈とは、たとえば

(void *)0; /* キャスト */
int *i = 0; /* ポインタ変数への代入*/
void foo(void *);
foo(0); /* ポインタを取る関数のパラメータ */

など。fooを例に取るとこいつに渡るのはたしかにvoid*型のNULLポインタなのだが、
パラメータを積んだスタックにバイナリ0があるとは限らないっていうこと。

# もっともスタック渡しかどうかも処理系によるんだけどそこはそれ