了解 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++ -“字符文字”与“字符串文字”[重复]的主要内容,如果未能解决你的问题,请参考以下文章