为什么C ++中的C字符串和Char数组和Char指针差异

时间:2015-06-28 21:48:34

标签: c++ pointers c-strings

为什么这样:

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字符串的内存地址。我错了吗?

3 个答案:

答案 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";无法解释为charchar类型只需要一个字符。像这样:

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?