C言語関係掲示板

過去ログ

No.68. NULLと0と'\0'の違い


実は最近C言語を勉強し始めたのですが、
C言語でのNULLと0と'\0'の違いがわかりません。

NULLは、((void *)0)と定義されていましたが、
どういうことでしょうか?

実際プログラムで、((void *)0)を表示させると
私の環境では(null)と表示されました。

また、((void *)0)を((char *)0)とすると落ちました。

この違いもわからずさっぱりです。


すいませんが、教えてください。


こんにちは、ともじです。

> C言語でのNULLと0と'\0'の違いがわかりません。

NULL : 空ポインタの意味です。これは通常、ポインタを返す関数で何らかの事情で
     ポインタが返せないときに用います。
0   : 数値定数 0 のことです。
'\0'  : 文字列定数の最後を示す終了コードのことです。
http://www9.plala.or.jp/sgwr-t/sec2.htm#s2-4-nul

> NULLは、((void *)0)と定義されていましたが、どういうことでしょうか?

NULLは多くの処理系で((void *)0)と定義されています。
(0 や (0) や 0L となっている処理系もあります)
この ((void *)0) は汎用ポインタのNULLという意味です。
http://www9.plala.or.jp/sgwr-t/lib/malloc.htm#sankou


ども。

ちょっとだけ。

NULLは「無効なアドレス」を明示的に示すために用意されて
います。重要なのは、NULLがどのように定義(実装)されて
いるかを意識する必要がない(もっと言えば、意識しなければ
ならないようなプログラムは書くべきではない)という点です。

ちなみに、C以外のいくつかの言語では、ポインタは宣言時に
必ずNULLで初期化されます。これはエラーを捕捉したり、
変なとこをアクセスしないようにする微力ながらの工夫です。
Cの場合は特に初期化されないので、明示的に初期化しない限り
意味のないアドレスを指していますが。
# もっとも、Cの場合は、効率第一であり、プログラマは神で
# あって間違いを起こさないという前提がありますから。。


ついでに。
以下はNULLと0と'\0'の違いを完璧に理解してから読んでください。

'\0'はしばしばヌル文字(null character)と呼ばれます。これは
'\0'が数値で言うと0(0x00)に相当するためだと思われます。
# printf("%d",'\0')とかやってみてください
あと、英語の文で"null terminated"という単語が出てきたら、
それは'\0'で終わる(文字列)という意味です。

では。

戻る


「初心者のためのポイント学習C言語」 Last modified:2001.11.15
Copyright(c) 2000-2002 TOMOJI All Rights Reserved