了解 C++ -“字符文字”与“字符串文字”[重复]

Posted

技术标签:

【中文标题】了解 C++ -“字符文字”与“字符串文字”[重复]【英文标题】:understand C++ - "character literal" vs "string literal" [duplicate] 【发布时间】:2019-06-07 20:45:58 【问题描述】:

我正在阅读一本关于“字符文字”与“字符串文字”的教科书。上面写着:

'A' 存储为 65

“A”存储为 65 0

char letter;
letter = 'A' // this will work
letter = "A" // this will not work!

教科书的解释让我很困惑。它说“因为 char 变量只能容纳一个字符,所以你不能为它们分配字符串文字。”任何人都可以进一步解释,它没有在我的脑海中点击。感谢您的宝贵时间

【问题讨论】:

字符串字面量(或真正的以 null 结尾的常量字节字符串)实际上是 数组。文字字符串"A" 是一个由两个字符组成的常量数组(即const char [2])。 【参考方案1】:

你应该看到这个: Single quotes vs. double quotes in C or C++

正如每个人所说的,考虑数组。 一个字符只有一个字母或数字或符号,它由简单的引号声明。然而,当你用双引号声明时,你实际上是在表明这是一个字符串或数组。因此,您应该像数组一样声明变量。例如:

char letter[] = "A";

或者

char *letter = "A";

如果你想要一个静态数组,你可以试试这样的:

char letter[5] = 'H','E','L','L','O';

如果您想查看其他观点,可以阅读以下内容: http://www.cplusplus.com/doc/tutorial/ntcs/

希望我能有所帮助。

【讨论】:

【参考方案2】:

您可能缺少的是字符串可以是任意长度的事实。编译器以您键入的方式将字符串放置在程序/内存中的某个位置,但它需要知道字符串的结束位置!这种类型的字符串称为零或空终止。这意味着字符串是实际的字符串数据,后跟一个值为0的单个字节。

所以在示例中,'A'字符 A。在内存中,它可能会紧跟一些垃圾/不相关的数据,但这没关系,因为编译器知道只使用那一个字节。

"A"字符串 A. 在内存中,它后面必须跟一个空终止符,否则程序可能会因为紧跟在字符串后面的垃圾数据而混淆。

【讨论】:

您输入的方式并非总是如此。注意转义字符,例如'\n' @user4581301 好点,这可能有点过于简化了。【参考方案3】:

将字符串视为字符数组,其中该数组的一个元素就是“字符文字”。

【讨论】:

以上是关于了解 C++ -“字符文字”与“字符串文字”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

了解 C++ 可见性支持

了解 C++ 中运算符的范围

了解 C++ 中的继承和多态性

了解 C++ 中放松的内存顺序

除了 C++ 之外,其他语言的程序员是不是使用、了解或理解 RAII?

试图了解如何将 C++ 对转换为 C 代码