目前我正在阅读C ++教学书,但我不理解以下内容:
作者对\0
说这是真的0而不是数字0。
所以也许有人可以澄清真0和0之间的区别是什么?
答案 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.