理解C++“字符文字”与“字符串文字”

理解C++“字符文字”与“字符串文字”,c++,char,C++,Char,我在读一本关于字符文字和字符串文字的教科书。它说: “A”存储为65 A存储为65 0 char letter; letter = 'A' // this will work letter = "A" // this will not work! 教科书上的解释把我弄糊涂了。它说,因为char变量只够容纳一个字符,所以不能为它们分配字符串文本。有人能进一步解释一下吗,这不是我脑子里想的。感谢您抽出时间您可能缺少的是字符串可以是任意长度的事实。编译器按照您键入字符串的方式将字符串放在程序/内存中

我在读一本关于字符文字和字符串文字的教科书。它说:

“A”存储为65

A存储为65 0

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

教科书上的解释把我弄糊涂了。它说,因为char变量只够容纳一个字符,所以不能为它们分配字符串文本。有人能进一步解释一下吗,这不是我脑子里想的。感谢您抽出时间

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

因此,在示例中,“A”是字符A。在内存中,它后面可能紧跟着一些垃圾/不相关的数据,但这没关系,因为编译器知道只能使用这一个字节


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

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

您应该看到:

正如大家在这里所说的,考虑数组。 一个字符只有一个字母、数字或符号,它用简单的引号表示。但是,当您使用双引号声明时,实际上是在表明这与字符串或数组有关。因此,应该像数组一样声明变量。例如:

char letter[] = "A";

如果需要静态数组,可以尝试以下方法:

char letter[5] = {'H','E','L','L','O'};
如果你想看到另一种观点,你可以阅读以下内容:


希望我能有所帮助。

字符串文字或真正以null结尾的常量字节字符串实际上是数组。文字字符串A是两个字符的常量数组,即const char[2]。您键入它的方式并不总是这样。注意像“\n”这样的转义字符。@user4581301很好,这可能有点过于简化了。
char letter[5] = {'H','E','L','L','O'};