2013/07/05

初心者プログラマー必見!よくわかる「null」の概念

初心者プログラマー必見!よくわかる「null」の概念

初心者プログラマーはなかなか理解しにくい概念の「null」。

今回は、

■そもそも「null」とは何か
■変数を宣言した時に内部で行われる処理
■nullと0の違い

この3つについて詳しく解説をしていきます。

■nullとは

簡単に言いますと、変数が持っているアドレスが0.0.0.0の状態がnullです。

これはC言語での事ですが、他のプログラミング言語にも通じる基本的な考え方です。

■変数の宣言

プログラムで使う変数は宣言をした時に領域が確保されます。

中には宣言の必要がないプログラミング言語もありますが、それは、そのプログラミング言語が内部で宣言をしてくれているだけです。

例えばC言語だと型と変数名を宣言しなければいけませんがphpだと宣言なしで、型を意識することなく変数を使うことができます。

■変数のサイズ

通常のパソコンの変数は32ビットです。

ipアドレスと同じく0.0.0.0 ~ 256.256.256.256ですね。

64ビットのパソコンの変数は64ビットです。

■メモリ


パソコンのメモリは
アドレスを格納しておく領域
データを格納しておく領域
に分かれます。

変数が宣言された時にまずメモリの「アドレスを格納しておく領域」に32ビットのスペースが用意されます。

変数にデータが代入される時、「データを格納しておく領域」にそのデータが書き込まれ、そのメモリのアドレスを変数に代入します。

データが格納されている領域のアドレスだけを持っているのが変数です。

ただC言語以外の大抵のプログラミング言語では変数が持つアドレス(ポインタ)を意識することなくデータを参照できます。
※C言語では変数の持つアドレスの事をポインタと呼びます。

■nullと0の違い


nullと0は混同されがちですが、

  • ■nullはアドレス
  • ■"0"はデータ

ですので、「高さ」と「速さ」ぐらい違います。

また、単に0と言ってもデータ型によっていろいろな意味があります。

数字の0でも1ビットしか領域が確保されていなかったり64ビットの領域が確保されていたり。

文字の"0"でも全角だったり半角だったり。
(shift-jisで文字の全角"0"は 0x824F、半角"0"は 0x4F という形で表されます)

このようにデータの"0"にはいろいろな可能性があります。

■まとめ

"0"とは変数の持っているアドレス(例えば156.3.45.113)の場所に"0"が格納されているイメージです。

nullとは変数のアドレス自体が0.0.0.0の状態です。

実際にメモリのアドレス0.0.0.0の場所は存在しますが、OSが使っている領域ですので参照したり書き換えようとするとエラーになります。