为什么 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";
不可能被解释为char
。 char
类型只需要一个字符。像这样:
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?
为什么会这样:
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";
不可能被解释为char
。 char
类型只需要一个字符。像这样:
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?