为什么这样:
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字符串的内存地址。我错了吗?
答案 0 :(得分:3)
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';
答案 1 :(得分:0)
在const char cwords = "These are even more words";
中,您正在使用指针将{8}整数(const char
)初始化为const char
。这是非法转换。
答案 2 :(得分:0)
因为char是1个字节。
您正尝试将超过1个字节放入保存1个字节的数据类型中。 const char cwords =“这些甚至更多的话”;
在此示例中,您将创建一个数组并获取指向数组中第一个char的指针 const char * cwordsp =“这些是更多的单词”;
指针数组和常规数组几乎是一回事,但差不多。您可以阅读更多相关信息:C/C++ int[] vs int* (pointers vs. array notation). What is the difference?