• ベストアンサー

NULL

C言語で、0の代入とNULLの代入はバイナリレベルでは同じ事だと聞いたのですが本当なんでしょうか? とすると int i = 0; と int i= NULL; は、同じ事なんでしょうか。 また、 if(!aaaa){ と if(aaaa == NULL){ は同じ条件文なんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#5537
noname#5537
回答No.2

> C言語で、0の代入とNULLの代入はバイナリレベルでは > 同じ事だと聞いたのですが本当なんでしょうか? ポインタ変数に 0 を代入するのと,NULL を代入するのは同じことです。 NULL は単なるマクロで, #define NULL 0 #define NULL ((void *)0) のいずれかですから。 詳細は参考 URL (C-FAQ の5章です)を参照してください。 残りの疑問に対する回答もあります。

参考URL:
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/c/C-faq/C-faq-05.html
f_attck
質問者

お礼

御回答ありがとうございます。 大変勉強になりました。

その他の回答 (1)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

NULLは、NULLポインタですので型はポインタ型です。 int型の値として利用するのは、左右の型が一致しないのでお勧めしません。 (コンパイラによってはWarningが出ます) C言語では、零を偽、非零を真として扱いますのでaaaaがポインタ型なら 同じと考えても差し支えありません。 C言語でミスの少ないコーディングをするためには、型を意識したり、 わかりやすいコーディングをすることが重要ですので、そのあたりを 注意される方がいいかと思います。

f_attck
質問者

お礼

御回答ありがとうございます。 大変勉強になりました。

関連するQ&A