プロが教えるわが家の防犯対策術!

これはあるサンプルプログラムで見ました。

char *p;

p='\0';

なんですが、'\0'は文字なのに何故ポインタに代入できるのかがわかりません。'\0'は文字ではなくてNULLなのですか?よろしくお願いします。

A 回答 (3件)

これはコンパイラがどう解釈するかをじ~っと追っていかないとわからないよな, 普通.


'\0' は「文字コード 0 の文字」を表すわけですが, 「文字」は整数なので実際には「0」という値になります. そして, 「ポインタが必要なところで整定数 0 が現れたときにはヌルポインタとして扱う」という規則があるので, 今の場合には (ポインタ変数に代入するためにはポインタでなければならないので) 「ヌルポインタである」ということになります.
結果的に
p = '\0';

p = 0;
はどちらも
p = NULL;
と書いたのと同じ意味になります.
まあプログラム上は間違いではないけどほぼ間違いだと思っていいです.
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/29 00:44

ヌルとヌル文字の違い……で検索すると出てくるかなー?



\ってのはエスケープ文字。これは分かるね?
\0はNULLではなくNULL文字、いわゆる文字列の終端コード。

char a[] = "abcd";

とした場合、メモリ上では

abcd\0 と終端文字列を含めた5バイトの文字列が入っているんですよ。
Cは終端文字列='\0'=ヌル文字を見て、文字列の終わりを判断するからね。

厳密にはNULLとヌル文字は違うけど、ほとんどの処理系はNULLとヌル文字は同一の0x00が用いられてるね。
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/12/29 00:45

制御コードってことでしょ?



JIS X 0211 制御コード表
http://ash.jp/code/ctrltbl.htm
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/29 00:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!