• ベストアンサー

nullの概念

nullの3つの概念と言われる、空文字、空ポインタ、空文の意味と必要性がいまいちわかりません。 ご存じの方ぜひ教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • fonera
  • ベストアンサー率52% (38/72)
回答No.3

恐れ入ります。 hyenaydtekieさんがすでに質問の中に書いておられますが、NULLとは概念そのものです。 その概念とは、(No.2の方も書いておられますが)『空っぽである』という事です。ナニかが空っぽである事を明示するために、NULLという概念が用いられます。 ・空文字(null character) 『「文字が入っていない」という事を示す文字』の事です。 なぜ必要かというと、プログラミング言語が変数に値を入れて計算するからです。 例えば、 『[box]という名前の変数にはアルファベット1文字を入れること』と決めたとします。 このとき、[box]の中には a が入っていても良いし b が入っていても良いです。 でも、プログラムでは時に『[box]の中に何も入っていないときだけ、その中にアルファベットを入れたい』という要求が生じます。 このとき、例えば z が入っていたら、何も入っていないことにしようということにして、[box]に z を入れておいて、チェックすることはできます。でも、そうすると z が入ったときにアルファベットが入った、と判定できなくなってしまいます。 変数には何かを入れて処理を行いますが、『変数の中には何も入っていない』というのを表したいことがあるから、空文字(null character)はあるわけです。 ・空ポインタ(null pointer) こちらも空文字とほぼ同じです。 ポインタとは、「変数の番地を表す変数」の事ですので、本質的には空文字となんら変わりがありません。 空文字の所でだいぶ丁寧に説明しましたので、null pointerは別に「z」でも良いし、「123」でも良いし、「0」でも良いのはわかると思います。 単に「このポインタは、どの変数の番地も表していない」という事がわかれば良いからです。(その取り決めは言語・実装毎に異なります) ・空文(null statement) 「何もしない文」という意味です。主に二つの需要から生まれました。 1.見栄え 2.コンパイラが混乱するから if (10 > i) { ; } else { i = i - 10; } この場合、見栄えをそろえるために上のifブロックの中に;だけ入れてあります。これがC言語における空文です。 if (10 > i) {} else { i = i -10; } とか書くと、構文解析に失敗するコンパイラがあったからというのも理由の一つです。(普通はこんな変なif文を書いたりしませんが) 混乱しがちですが、「何も入ってない」「何も指し示さない」「何もしない」という、「空っぽである」という定義がnullです。 『何もデータが入っていないときだけ、データを入れよう』 『このポインターはもう使わないから、ちゃんと使っていないと表現したい』 『ここは別に何もしないブロックだと書いておこう』 、そんな需要から生まれたのが、nullです。 *** なお、実装(どうその定義が表現されているか)は、プログラミング言語によってまちまちです。 JIS規格で決まってるC言語のNULLの定義をよく見ると、たまに矛盾してて面白いですよ。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yphkz4063
  • ベストアンサー率23% (34/144)
回答No.2

ヌル文字、ヌルポインタ、nullデバイスの意味は以下のようになります。 http://ja.wikipedia.org/wiki/%E3%83%8C%E3%83%AB_%28%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%29 プログラムで言う空文は、なにもしない文ということです。 代表的なのが、アセンブリ言語でよく使われるNOPです。何も実行せずに処理時間だけ消費します。 意味そのものは、これらの説明内容を額面通り解釈したものでいいと思います。 必要性はなにかということですが、「null値は定義されていない値」と言われますが、この言い方がすべてを説明していると思います。 定義されていないものに値が必要なことがあり、それがnull値であるということです。 null値の実態は数値のゼロであったりしますが、ものの考え方としてはゼロとnull値は別物です。 なお、あるべきものがないなど、値の形を取らないものも、考え方は同じです。

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

空文字:'\0'(文字列の終端を示すときなどに使う)→NULLとは異なります 空ポインタ:NULL(どこも指していないポインタを示すときなどに使う) 空文:式を伴わない文(本体を伴わないforループなどの場合に使う)→NULLとは異なります

hyenaydtekie
質問者

お礼

ありがとうございます

すると、全ての回答が全文表示されます。

専門家に質問してみよう