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)

追記:・・・キーワードがミスってる><