为什么 C++ 中的字符串与 Char 数组和 Char 指针不同

Why the C string and Char Array and Char pointer differences in C++

为什么会这样:

const char cwords = "These are even more words";

结果 **error**: cannot initialize a variable of type 'const char' with an lvalue of type 'const char [22]'

但是这个:

const char * cwordsp = "These are more words";工作? (不会导致错误)

看来指针cwordsp 应该需要指向那个c 字符串的内存地址。我错了吗?

C 字符串只不过是一个字符数组。

所以除了你的工作示例,你还可以做这样的事情:

const char cString[] = "Hello world";

这基本上等同于:

const char cString[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd' };

请注意,这是一个 char 的数组,而不是单个 char

您 运行 遇到此问题的原因:

const char cString = "Hello world";

是因为"Hello world";不可能被解释为charchar 类型只需要一个字符。像这样:

const char c = 'h';

const char cwords = "These are even more words"; 中,您正在使用指向 const char 指针 初始化一个 8 位整数 (const char)。这是非法转换。

因为char是1个字节

您正在尝试将超过 1 个字节的数据放入包含 1 个字节的数据类型中。 const char cwords = "These are even more words";

在此示例中,您创建了一个数组并获得了指向数组中第一个字符的指针 const char * cwordsp = "These are more words";

指针数组和普通数组几乎是一回事,但只是差不多而已。您可以阅读更多相关信息:C/C++ int[] vs int* (pointers vs. array notation). What is the difference?