C言語 プログラミング

C言語プログラミングを始めたばかりの頃に疑問に思ったこと。

なぜ文字列配列の終端文字であるナル文字’\0’は数値の0を意味するのか。

文字列配列の終端を意味する記号ということはすぐに理解していましたが、それが数値の0だということが理解できなかったので、ナル文字’\0’をwhileにループしたコードが正直最初は理解できませんでした。

スポンサードリンク

なぜ’\0’は0なのか

上記のサンプルコードでは文字列の長さを求めるために、char型の配列strの要素番号をインクリメントしナル文字が見つかるまでループを継続します。

str[i]がナル文字を示すときwhile文の制御式は(‘\0’ != 0)となりループを脱出するということですが、’\0’が0だということがわかっていなかったのでこのコード自体もいまいち理解しきれていませんでした。

 

文字はあくまでも数字

理解できないままスルーしていたが、文字コードについて学び始めてようやく理解できたような気がします。

コンピュータは0と1のバイナリしか理解できないもので文字や画像も内部では数値として表現している。

そのため英字や数字、日本語は文字コードで数値を割り振ることによって、コンピューター上で表現することができている。

C言語では文字を扱う際にint型とは別のchar型の変数を用意しているため、文字をそのまま扱っているように勘違いしがちだが、char型も文字を数値として扱いっているにすぎない。

これはint型の引数を用いるputchar()関数で文字が出力できることから何となくわかると思う。

 

‘\0’==0の確認

ではナル文字’\0’は本当に数値の0を示すのだろうか?

ASCIIコード
ASCII Conversion Chart

ASCIIコードを参照してみるとNULLには10進数の0が割り振られていることが確認できる。

 

次は簡単なサンプルコードを作成して確認してみた。

ASCIIコード表と比較してみるとAとNULLにそれぞれ65と0が割り振られていることが確認できる。

 

アラートの\aや改行の\nなど拡張表記もなんとなく利用していたが、プログラムでコード番号を確認しASCIIコード表で照らしあわせてみると制御系の一部であることが分かった。

文字は数字で表現されていると分かっているつもりでいましたが、ようやく頭の中でプログラムと文字コードが結びついたような気がします。

 

【C言語】ナル文字’\0’はどうして数値の0となるのか
Tagged on:     

コメントを残す