• ベストアンサー

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% (2126/6288)
回答No.1

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

hyenaydtekie
質問者

お礼

ありがとうございます

関連するQ&A

  • NULL

    NULLと、文字配列の終端文字、\0ヌル文字は、まったく同じものですか? nullはポインタなんですか? \0はヌル文字と呼べばいいんですか? 教えてください。

  • AccessのNULL値とSQL ServerのNULL値で違いはありますか?

    SQL ServerのテーブルをAccessにODBCでリンクを貼っています。 AccessでSQL ServerのNULL項目を表示した際に挙動がおかしくなったので… そこでSQL ServerのテーブルのNULL値を空文字("")にしたら正常になりました。 AccessのNULL値とSQL ServerのNULL値で違いはありますか? ご存知の方がいましたらご教授お願いします。

  • 空の文字列とnullと""

    java初心者です。 空の文字列とnullと""の3つの関係がよくわかりません。 TextFieldを使った簡単なプログラムを作りました。そこで、”TextFieldに何も入力されていないこと”を判定する文を書こうと思ったのですが、どう書けばいいのか迷いました。 TextFieldのオブジェクトをtfとして、tf.getText()==""かtf.getText()==nullで大丈夫だと思いましたが、実行してみると、どちらを用いても判定できませんでした。結局、tf.getText().length()==0で判定できました。そこで、リファレンスを見ると、getText()はデフォルトで空の文字列を返すと、書いてありました。 したがって、「""とnullは空の文字列とは異なる」という理解に至ったのですが、では空の文字列とは何なのかという疑問がわいてきました。 また、自分は""とnullの違いもよくわかっていません。""とnullが異なるものである、ということはわかるのですが・・・ 質問をまとめると ・空の文字列とは何なのか? ・空の文字列は""やnullとどう違うのか? です。よろしくお願いします。

    • ベストアンサー
    • Java
  • なぜポインタという概念が誕生したの?

    C言語には「ポインタ」という概念がありますが、そもそもなぜ「ポインタ」という概念が生まれたのですか? 「ポインタ」という概念が生まれた背景は何なんでしょうか? 当時、メモリの性能が貧弱だった為、それを有効に活用する為に生まれたのでしょうか? それに、「ポインタ」という概念がないとどうなるのでしょうか? 回答のほうよろしくお願いします。

  • あるカラムを対象に、Nullと空文字をゼロとして抽出したい

    SQL server 2005についての質問です。 ISNULL関数を使うと、Nullをゼロとして取り出せることがわかりました。 しかし、空文字をゼロとして取り出すことはできないようでした。 Nullと空文字が入り混じったカラムを対象に、Nullだけでなく空文字もゼロとして取り出す関数などはあるでしょうか? 以上、どうぞよろしくお願い致します。

  • MySQLのNOT NULL制約について

    MySQLでは、あるカラムをNOT NULL制約にしていたとしても、文字列型には空文字が、数値型には0を保存できます。 NULL、空文字、0をそれぞれ区別している仕様自体は問題ないと思いますが、NOT NULL制約のようにあるカラムで特定の値を許可しないような設定でできないのでしょうか。

    • ベストアンサー
    • MySQL
  • (String)nullはnullではなく文字列?

    引数として、(String)nullを渡しているコードがあるのですが、 これは「null」ではなく文字列としての「null」を渡しているのでしょうか? ・Stringでキャストしていると思うのですが、nullもキャストできるのでしょうか? ・それとも何か特別な意味がある?

    • ベストアンサー
    • Java
  • C++のNULLは意味があるの?

    タイトルの通りです。 0で全て済むのに、わざわざNULLを使う必要が分かりませんし、私は全く使った事がありません。 ただ0と書くと数値かポインターかすぐには分からない からというのは、あまり対した理由にはなりそうも無いし。 ほかの人がNULLを使っているのをそのまま参考にしたと言うのが多いかもしれないですね。

  • 「概念」について。

    「概念」という言葉は「ある事物の概括的な意味内容」という意味で、「およそ」と読む「概」の字から考えれば、誤訳と言えます。 そこで、明治時代にこの「概念」という言葉に訳した政治家かが思想家がいたと思うのですが、どうしてもその人の名前が思い出せません。 ご存知の方いらっしゃいましたらよろしくお願いします。

  • nullと""、\0とEOFの違いについて。

    いつも気になっていたのですが、 (1)nullと""、(2)\0とEOFは、同じなのでしょうか、 違うのでしょうか。 (1)については、違う気がします。しかし、""は、 なにを表しているのか分かりません(0バイトなのか、 空文字にも文字コードがあるのか、""と空白" "は 違うのか)。 (2)は、同じだと思うのですが・・。 文字を数えたりすると、これらが気になります。 お願いします。

専門家に質問してみよう