【问题标题】:understand C++ - "character literal" vs "string literal" [duplicate]了解 C++ -“字符文字”与“字符串文字”[重复]
【发布时间】: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])。

标签: c++ char


【解决方案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】:

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

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2017-12-15
      • 2013-09-18
      • 2010-09-12
      • 2013-04-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多