性格いい人が優勝

NULLと’\0’のNULL文字は違うものですか?また、’\0’はエスケープシーケンスですか?

A 回答 (3件)

NULLはヌルポインタといって無効なポインタを示す。

C言語ではポインタを要求されるところに0を書くとヌルポインタを示すが、これはヌルポインタのリテラル表記が0ということで、整数0を意味するわけではない。概念的には別物である。NULLは標準ライブラリではstddef.hを含む幾つかのヘッダでマクロ定義されるが、本質的にマクロ定義でなく言語仕様として用意すべきと思う。この辺りは初期の実装と互換性の都合だろう。
'\0'は文字コード0の文字で、ASCIIならNULである。NULL文字は誤用になる。ただしC標準でNULを'\0'と定義しているものはないと思う。なので'\0'の意味でNULを使うなら自分で定義するか適当な定義を読み込むことが必要になる。なおC言語における文字は整数なので、'\0'は0である。

まとめると、C言語においてリテラル0には3つに意味合いがある。
1. 整数0
2. ヌルポインタ(無効なポインタ)
3. NUL = '\0'

おまけ。
NULLのマクロ定義はC言語だと
#define NULL 0
#define NULL ((void*)0)
のどちらかが一般で実装によるが、C++だと後者は使えない。汎用的なのは前者だが、これだとポインタと整数の書き間違えをコンパイラでチェックできなくなる。GCCとかだとヌルポインタを示す実装定義の定数があり、マクロではそれを宣言しているようである。
    • good
    • 0

「NULL」は無効なポインタを表すもので, <stdlib.h> を含むいくつかの標準ヘッダでマクロとして定義されている. 一方「'\0'」は「文字コード 0 に対応する文字」で, 値としては (C なら int, C++ なら char の) 0. ASCII表だと制御文字は最大 3文字で表すので「NUL」って書いてある.



まあ, 本来的には違うもの. NULL が 0 と定義されていることもあるのでその場合には互換性が生じてしまうが, 本質的には違うものだと理解すべき.

「エスケープシーケンス」は正確には「\0」の部分だね. 「'\0'」は「エスケープシーケンスを使った文字定数」というべきかな.
    • good
    • 0

NULLはポインターが無効であることを示す時に、使用します。


’\0’は文字列の終端の判定時に使用します。
’\0’はエスケープシーケンスです。
下記が参考になるかと。
http://www.kis-lab.com/serikashiki/C/C01.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!