理解问 - 特征0不是数字0

时间:2014-02-16 14:37:45

标签: c++

目前我正在阅读C ++教学书,但我不理解以下内容:


作者对\0说这是真的0而不是数字0。

所以也许有人可以澄清真0和0之间的区别是什么?

3 个答案:

答案 0 :(得分:4)

\0用作字符串终止字符。不要与ascii值为48的字符0混淆。因此,当迭代空终止的C样式字符串时,当您将字符与0进行比较时,\0将产生{{1 },但不是true

答案 1 :(得分:1)

本声明

  

作者对\ 0表示这是真0而不是数字0。

含糊不清。

而且我认为有一个错字。而不是\0应该有'\0'

我认为作者意味着字符文字。例如,“0”是表示数字0的字符文字,并且具有不同于0的代码的内部表示。例如,对于ASCII代码,“0”具有内部表示48或0x30(十六进制)。对于EBCDIC,“0”具有内部表示0xF0。

字符文字'\ 0'确实内部表示为0.'\ 0'是所谓的octal escape character literal。例如,'\ 010'是十进制数字8的八进制表示。

由于类型char属于算术类型,因此当在某些算术表达式中使用'\ 0'时它确实具有值0而'0'具有值0x30(对于ASCII)或0xF0(对于EBCDIC)或其他取决于使用平台中符号的编码系统。

答案 2 :(得分:0)

\0是C ++中的NULL字符,主要用于终止字符串等。

0是数字数字的位置。

c-faq的解释清楚,

C programmers must understand that NULL and 0 are interchangeable in pointer 
contexts, and that an uncast 0 is perfectly acceptable. Any usage of NULL (as 
opposed to 0) should be considered a gentle reminder that a pointer is involved;
programmers should not depend on it (either for their own understanding or the
compiler's) for distinguishing pointer 0's from integer 0's.

It is only in pointer contexts that NULL and 0 are equivalent. NULL should not be 
used when another kind of 0 is required, even though it might work, because doing
so sends the wrong stylistic message. (Furthermore, ANSI allows the definition of
NULL to be ((void *)0), which will not work at all in non-pointer contexts.) In
particular, do not use NULL when the ASCII null character (NUL) is desired. 
Provide your own definition

#define NUL '\0'

if you must.