ほとんどの人が "ヌル" と聞くと "NULL" を思い出すと思います。
しかし、プログラム中では NULL と '\0' の2種類あります。
プログラム中で使っている NULL とは何でしょう?
用語的には "ヌルポインタ" と呼ばれています。
では、'\0'は何でしょう?
こちらは "ヌル文字" と呼ばれています。
名前からもわかるように、この二つは "ポインタ" と "文字" の違いがあります。
'\0'が0であることに対し、NULLはstdio.hの中で次のように定義されています。
つまり、完全なポインタとなっています。
1:#define NULL ((void*)0)
ここで、文字列を思い出してください。
文字列の最後は "ヌル文字" であったはずです。
多くの人が文字列の終端を探すために次のような文で判断していると思います。
人によっては文字列の終端を探すために次のような分で判断していることがあります。
これは、"文字"という"値"と、"NULL"という"ポインタ"を比較しています。
1:while(string[i] != NULL)
2: i++;
1:while(string[i] != '\0')
2: i++;
最後にまとめておくと
NULL | : ポインタが 0 であるか判断する | |
'\0' | : 値が 0 であるか判断する |
ただし、C++ではこの違いは吸収されたらしく
と定義されています。(というより,もともとC言語は0をポインタ型として自動的にキャストするように保障されていたのですが)
1:#define NULL 0