C言語において、NULL と 0 と '\0' の違いは何ですか?
C言語において、NULL と 0 と '\0' の違いは何ですか?
ここでいう 0 とは '0' (文字の 0 )ではなく数値の 0 です。 '0' はASCIIコードから 0x30 になるので違いが分かりやすいけど、自分の挙げた3つはどれも 0x00 のはずなので違いが分かりにくいんです。
C言語関連・187,906閲覧・25
ベストアンサー
皆さん色々書いていますが,要は型が違うだけです。値はどれも同じです。 NULL ← void* 型 0 ← int 型 '\0' ← char 型 C言語では型の違いを意識することはあまりないけど,C++では重要になる ことがあります。 それから,C++ではNULLがint型になっています。 理由を聞いた事があるけど…,忘れてしまったww (追記) >petit_saintさん >となると、0と'\0'の違いは、int型で「0」を表す場合に0、 >char型で「0」を表す場合に\0(終端を意味する)となりますね。 ふふふ。 この辺りは,C言語を勉強したての頃は,間違えやすいですよね。 この場合はあまり深く考え無くても,単純に型が違うという ことでOKです。 >C言語でも型の意識はしますよ。とても。浮動小数点演算するときにintでやりませんよね? 言葉足らずでした。確かに浮動小数点か整数型かは明確に 意識しますね。 言いたかったのは,C++ よりも意識する頻度が少ないということです。 意識することが全く無いということではありません。 それから,C++でNULLがint型になっている件については,以下の URLに記載されていました。 http://ja.wikibooks.org/wiki/More_C++_Idioms/nullptr (一部記載漏れたので,再追記) >あと、値は違いますよ。というか「値」というくくり方ができないですよ。 >NULLは、アドレスが0。 書き忘れたけど,C言語の場合でもNULL の値は0だよ。 もちろん,NULLはvoid*型なので,数値ではないけどね。 アドレスに格納されるのがどうのと書いているけど,たとえば, void**型の変数があって,そのポインタの指す領域に NULLを代入したら,メモリには0x00000000が格納されるよね? *(int*型の変数) = 0; ← メモリには,0x00000000が代入される。 *(char*型の変数) = '\0'; ← メモリには,0x00が代入される。 *(void**型の変数) = NULL; ← メモリには,0x00000000が代入される。
19人がナイス!しています
質問者からのお礼コメント
ありがとうございました。
お礼日時:2008/10/8 20:01