Windows32 API p64

LPSTR p;
// ...
if ( p == NULL)
とかかなければならず、
LPSTR p;
// ...
if (!p)
と書いてはならない。
ん?誤解を招くような教え方をしちゃいけませんぜ。ANSI C 準拠のコンパイラであれば、
if (!p)
if (p != 0)
と全く等価であり、さらに、ポインタ型が 0 と比較されるときは、0 を NULL ポインタとして扱います。例え、NULL ポインタのビットパターンが全て 0 でなくとも、コンパイラは 0 を NULL ポインタとして解釈し、 if (!p)は正しく動作します。正しく動作しないコンパイラは ANSI C 非準拠なので、相手にしないことにしましょう。

問題なのはコードの可読性であり、文法的には全く問題がありません。