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

How is a const array able to have only characters in each element but a char* array is able to point to strings in each element?

本文关键字:元素 数组 char 字符串 包含 常量 字符      更新时间:2023-10-16
char characters[] = {'h','e','l','l','o'};

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

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

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

当你写这个的时候:

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

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

相反,当你写:

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

你定义了一个类型为char*的数组,即你定义了一个类型char*[5]的变量 --char*表示指向char的指针,即C 样式字符串。因此,您可以使用字符串文字类型的元素对其进行初始化。

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

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


1const char[2]而不是const char[1],因为它以 null 结尾,因为它是一个数组,保存要'h的第一个元素和要''的第二个元素

因为类型不同。在第一个示例中,您有一个字符数组,在第二个示例中,您有一个指向字符的指针数组(如果需要,可以使用数组数组(。字符串文本的类型为const char[],转换为const char*。在第二个示例中,您应该有一个const限定符:

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

碰巧您的字符串文字中有一个字符,后跟一个隐藏的 null 终止字符。因此,如果您有:

const char test[] = "h";

你实际拥有的是:

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

添加一个指向上述示例的指针,您将拥有一个以 null 结尾的字符数组数组。 为了使事情更清楚,您还可以:

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

更喜欢 std::string 而不是上述方法,因为它为您完成了所有繁重的工作。