Compiler construction 什么是反斜杠\&引用;真的吗?

Compiler construction 什么是反斜杠\&引用;真的吗?,compiler-construction,Compiler Construction,我想知道Java的反斜杠。计算机或编译器是如何看待这个反斜杠的?它是如何存储在计算机中的 我读到反斜杠删除了以下字符的特殊含义。但是计算机是如何处理这个问题的,在什么情况下用其他方式处理它呢 例如,在C编程中,空字符\0是字符串的结尾,但它是单个字符还是两个字符,即反斜杠+零 反斜杠的目的是表示人或表示0-1计算机?它实际上完全取决于上下文。反斜杠可能意味着许多不同的东西,这取决于你在哪里看到他们使用。例如,在Windows中,反斜杠通常用作路径分隔符 在基于C的编程语言(以及其他脚本语言)中,

我想知道Java的反斜杠。计算机或编译器是如何看待这个反斜杠的?它是如何存储在计算机中的

我读到反斜杠删除了以下字符的特殊含义。但是计算机是如何处理这个问题的,在什么情况下用其他方式处理它呢

例如,在C编程中,空字符
\0
是字符串的结尾,但它是单个字符还是两个字符,即反斜杠+零

反斜杠的目的是表示人或表示0-1计算机?

它实际上完全取决于上下文。反斜杠可能意味着许多不同的东西,这取决于你在哪里看到他们使用。例如,在Windows中,反斜杠通常用作路径分隔符


在基于C的编程语言(以及其他脚本语言)中,它们是。他们指出,他们右边的字符应该以与通常不同的方式进行解释。在您的示例中,
\0
是一个空终止符,反斜杠表示编译器(和人类!)应该将
0
解释为空字符,而不是数字零。它将被视为仅一个字符,因为反斜杠在其功能完成后即被删除,除用作转义字符外,在该序列中没有任何意义。

反斜杠
\
是一个字符,就像字母
a
、逗号
和数字
4
一样。在一些编程语言中,尤其是C及其后代(可能还有祖先),它在字符串或字符文本中用于转义其他字符。例如,
'\a'
表示钟形字符,如果您打印它,计算机将发出嘟嘟声(
printf(“%c”,'\a')

作为一种C语言转义字符,它在很大程度上是编译器允许的人类构造,因此人类可以表达,例如bell字符。编译后的代码只存储字符-一个值为7的字节。非常清楚的是,它不会先存储
\
,然后再存储
a


在其他上下文中,反斜杠在运行时对程序意味着什么。最著名的例子是正则表达式语法,在这种语法中,反斜杠转义其他字符,以便赋予它们特殊的含义,或者去掉它们可能具有的特殊含义。例如,
grep'\'file.txt
将在file.txt中找到带有单词foo的行。在这种情况下,反斜杠在运行时确实存在,并且被程序解释为它们后面的
的转义。在这种情况下,
\
根本不表示字符;它们分别表示单词开头和结尾的零宽度匹配。

反斜杠仅在使用它的情况认为是特殊的情况下才表示特殊。例如,许多编程语言将它们作为字符串使用。这通常会改变下一个字符的含义。

嗨,马塞洛,谢谢你的详细回答。只有一件事,当我们制作一个类似字符串处理的c程序时,作为人类,我们在程序中使用“\0”来表示我们对字符串结尾的操作。那么,编译器做什么呢?是存储了“\”还是存储了下面的字符“0”(或示例中的“a”)?然后,当程序执行时,代码如何响应或处理该存储值?@pepero:对于以\0结尾的字符串,存储的值是一个值为零的字节(未设置位)。这恰好是另一个C转换,用于查找字符串的结尾。@佩佩罗:我猜你是在我保存编辑后的答案之前发表了评论的,这在第二段中明确阐述了这一点。我只是稍微调整了一下,以消除任何可能的歧义\0@BCS:我相信这只是MSDN文档中另一个不太有趣的异常。它被明确地提到,很有趣,因为它被暗示为八进制文字的一部分。