C言語において、NULL と 0 と '\0' の違いは何ですか?

補足

ここでいう 0 とは '0' (文字の 0 )ではなく数値の 0 です。 '0' はASCIIコードから 0x30 になるので違いが分かりやすいけど、自分の挙げた3つはどれも 0x00 のはずなので違いが分かりにくいんです。

C言語関連187,906閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

19

19人がナイス!しています

ThanksImg質問者からのお礼コメント

ありがとうございました。

お礼日時:2008/10/8 20:01

その他の回答(5件)

0

ss_xxzzさんのご指摘が的確だと思います。 NULLは、stdio.hで #define NULL ((void*)0) で定義されていませんでしたっけ? 追記 >tanak_muさん C++では、NULLは0として定義されているようですね。 C言語でも型の意識はしますよ。とても。浮動小数点演算するときにintでやりませんよね? あと、値は違いますよ。というか「値」というくくり方ができないですよ。 0は、0を示すアドレスの値が0x30。 \0は\0を示すアドレスの値が0x00。 NULLは、アドレスが0。 再追記 ↑あ、自分、間違ってました。 0は、0を示すアドレスの値が0x00ですね。 となると、0と'\0'の違いは、int型で「0」を表す場合に0、 char型で「0」を表す場合に\0(終端を意味する)となりますね。

3

無効なアドレスと数字のゼロと文字の違い。 同じだなんてとんでもない。

3人がナイス!しています

0

ID非公開

2008/10/4 1:16(編集あり)

表現上の違いとお考えください。 ポインタなどに空のアドレスを設定する場合は NULL。 整数など、数値に値を代入するような場合は 0。 Char など、1バイトを表現する場合は '\0'。 実際には、どれもゼロなのですが、 使う型によって意味合いが異なりますので、それぞれ使い分けます。 NULL は C言語においてはキーワードではなく、 #define NULL 0 と定義されているだけです。 コンパイル時には NULL も 0 に置き換えられ、 コンパイラが文脈の中で解釈した型の 0 として処理されます。 '\0' は、1バイトの 0 を意味しているだけで、 これもまた 0 です。 型と意味合いによって使い分けるため、とお考えください。 これは、読みやすいコーディングをする上で大切な習慣です。 ---------- 追伸: C++ではなく、Cでしたね。少々早合点してしまいました。 VC++では、WinDef.h に次のように定義されています。 #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif Cでは (void *)0、すなわちアドレスを意識していますが、 C++では 0 だということを現しています。 使い分けについては先に説明したとおりにしていれば、 CでもC++でも違いは出てきません。

0

/* 0 vs '\0' の実体と機能の比較(等価)実証です '\0'を使う理由は、ソース上でその役割を明示するため という事になります。 */ #include <stdio.h> int main(){ char *chs="ABCDEFGHK"; printf("\\0 by %%d, %%X = "); printf("%d %X\n",'\0','\0'); printf(" 0 by %%d, %%X = "); printf("%d %X\n",0,0); printf("\n"); printf("chs=%s\n",chs); printf("*(chs+7) = '\\0';\n"); *(chs+7) = 0; printf("chs=%s\n",chs); printf("*(chs+4) = 0;\n"); *(chs+4) = 0; printf("chs=%s\n",chs); return 0; } /* 出力: \0 by %d, %X = 0 0 0 by %d, %X = 0 0 chs=ABCDEFGHK *(chs+7) = '\0'; chs=ABCDEFG *(chs+4) = 0; chs=ABCD */

1

どれもゼロ、つまり「何も入っていない」ということを表すのに使います。 『0』は「0という数字」、つまり「数字が空」です。 しかし、「char a ='0';」とするとaに「0という文字」が入ってしい『0』が「空」という意味に使えないので「文字が空」というのを表したいときは『'¥0'』を使います。 同様に、「ポインタが空」を表したい場合には『NULL』を使います。 そんな感じだったと思います。 http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide50-1.html

1人がナイス!しています