const数组如何只能在每个元素中包含字符,但char *数组能够指向每个元素中的字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了const数组如何只能在每个元素中包含字符,但char *数组能够指向每个元素中的字符串?相关的知识,希望对你有一定的参考价值。

char characters[] = {'h','e','l','l','o'};


char* characters[] = {"h","e","l","l","o"};

后者如何能够指向单个字符串?

答案

因为种类不同。在你的第一个例子中,你有一个字符数组,在你的第二个例子中,你有一个指向字符的数组(如果你想要的数组数组)。 String literalsconst char[]类型,转换为const char*。在第二个例子中你应该有一个const限定符:

const char* characters[] = {"h","e","l","l","o"};

只是碰巧你的字符串文字中有一个字符后跟一个隐藏的空终止字符。所以如果你有:

const char test[] = "h";

你实际拥有的是:

const char test[] =  {'h', '\0'};

添加指向上面示例的指针,您有一个空终止字符数组的数组。为了使事情更清楚,您还可以:

const char* characters[] = {"hello","world","etc"};

更喜欢std::string采用上述方法,因为它可以为您完成所有繁重的工作。

另一答案

后者如何能够指向单个字符串?

当你写这个:

char characters[] = {'h','e','l','l','o'};

你定义了一个char类型的数组,即你已经定义了一个char[5]类型的变量。因此,您可以使用char类型的元素对其进行初始化。

相反,当你写:

char* characters[] = {"h","e","l","l","o"};

你定义了一个char*类型的数组,即你已经定义了一个char*[5]类型的变量 - 而char*意味着指向char的指针,即C风格的字符串。因此,您可以使用string literal类型的元素对其进行初始化。

也许第二个数组应该更恰当地命名为strings[]而不是characters[]

确切地说,像'h'这样的字符串文字本身就是const char[2]1类型,它在指针术语中对应于const char*。因此,应该定义这样的字符串数组const char* strings[] = ...而不是char* strings[] = ...


1 const char[2]而不是const char[1],因为它是空终止的,因为它是一个数组,第一个元素是'h,第二个是'\0'

以上是关于const数组如何只能在每个元素中包含字符,但char *数组能够指向每个元素中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

java中怎么判断字符串中包含字符个数

Substring with Concatenation of All Words, 返回字符串中包含字符串数组所有字符串元素连接而成的字串的位置

javascript 如何检查两个数组是否在JavaScript中包含相同的元素?

javascript 如何检查两个数组是否在JavaScript中包含相同的元素?

如何将拆分的字符串保存在C结构中包含的字符数组中?

将元素中包含的内容与数组一起添加