if (!p)について
よくはまるのでメモ
if (!p) {〜}って記述・・・ぱっと見わからないときがあります。(pはポインタ変数)
!pについて読み解こう!ってだけのメモっすw
まず、Cにおいて真/偽は0か0以外かで区別されていて、真が0以外、偽が0となってます。
!pが真になるということはpは0である必要があります。
で、!pのpですが、mallocなどで領域を確保すると、確保した先頭アドレスか失敗したらNULLが格納されます。
CにおいてNULLは(void *)0と定義されていますので、!0になり、0以外ということで真になるということです。
用はp == NULLと同じですね。(修正:p != NULLじゃないですね・・・)
で、結局のところ真/偽が、0or0以外で判断されているので比較演算の結果は0もしくは0以外で帰ってくることになります・・・なかでは何が起きているかは興味があったら調べてくださいw(調べたことはあったはずだが記憶にないorz)
追記:・・・キーワードがミスってる><