No.4ベストアンサー
- 回答日時:
NULLはヌルポインタといって無効なポインタを示す。
C言語ではポインタを要求されるところに0を書くとヌルポインタを示すが、これはヌルポインタのリテラル表記が0ということで、整数0を意味するわけではない。概念的には別物である。NULLは標準ライブラリではstddef.hを含む幾つかのヘッダでマクロ定義されるが、本質的にマクロ定義でなく言語仕様として用意すべきと思う。この辺りは初期の実装と互換性の都合だろう。'\0'は文字コード0の文字で、ASCIIならNULである。NULL文字は誤用になる。ただしC標準でNULを'\0'と定義しているものはないと思う。なので'\0'の意味でNULを使うなら自分で定義するか適当な定義を読み込むことが必要になる。なおC言語における文字は整数なので、'\0'は0である。
まとめると、C言語においてリテラル0には3つに意味合いがある。
1. 整数0
2. ヌルポインタ(無効なポインタ)
3. NUL = '\0'
おまけ。
NULLのマクロ定義はC言語だと
#define NULL 0
#define NULL ((void*)0)
のどちらかが一般で実装によるが、C++だと後者は使えない。汎用的なのは前者だが、これだとポインタと整数の書き間違えをコンパイラでチェックできなくなる。GCCとかだとヌルポインタを示す実装定義の定数があり、マクロではそれを宣言しているようである。
No.3
- 回答日時:
「NULL」は無効なポインタを表すもので, <stdlib.h> を含むいくつかの標準ヘッダでマクロとして定義されている. 一方「'\0'」は「文字コード 0 に対応する文字」で, 値としては (C なら int, C++ なら char の) 0. ASCII表だと制御文字は最大 3文字で表すので「NUL」って書いてある.
まあ, 本来的には違うもの. NULL が 0 と定義されていることもあるのでその場合には互換性が生じてしまうが, 本質的には違うものだと理解すべき.
「エスケープシーケンス」は正確には「\0」の部分だね. 「'\0'」は「エスケープシーケンスを使った文字定数」というべきかな.
No.2
- 回答日時:
NULLはポインターが無効であることを示す時に、使用します。
’\0’は文字列の終端の判定時に使用します。
’\0’はエスケープシーケンスです。
下記が参考になるかと。
http://www.kis-lab.com/serikashiki/C/C01.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 空文字 "" ですが 空文字の意味を教えてください。 3 2022/08/05 03:51
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
C言語のポインタに直接アドレス...
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
fopne で失敗する原因
-
Cで作成したDLL関数をVBから呼...
-
入れ子の構造体について
-
ポインタについて
-
C言語の文字列?処理 strcpyやl...
-
連結リスト 要素の入れ替え
-
戻り値で構造体を返すことは可...
-
ハンドルはポインタか
-
[C言語] NULLは必ず0(番地)です...
-
ExcelVBAでのkernel32(64bit)
-
参照型で受け取った引数をポイ...
-
C言語の勉強しています。すみま...
-
関数ポインタを返す関数の型をt...
-
コンストラクタでnewを失敗した...
-
自作DLLの引数について、ポイン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
Cで作成したDLL関数をVBから呼...
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
構造体とfscanf
-
c言語で任意のファイルから読み...
-
デバイスハンドルとは?
-
main(int argc,char **argv[])...
-
基本アルゴリズムの『返す』の...
-
コンストラクタでnewを失敗した...
-
C言語の関数と配列に関する質問
-
参照型で受け取った引数をポイ...
-
ハンドル、アドレス、ポインタ...
-
DLL<->VB間での受け渡し(文字...
おすすめ情報