c++ - const 数组如何能够在每个元素中仅包含字符,而 char* 数组却能够在每个元素中指向字符串?

标签 c++ arrays string char

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


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

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

最佳答案

How is the latter able to point to individual strings?

当你写下这个:

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< 类型/sup>,在指针方面对应于 const char*。因此,此类字符串的数组应定义为 const char* strings[] = ... 而不是 char* strings[] = ...


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

关于c++ - const 数组如何能够在每个元素中仅包含字符,而 char* 数组却能够在每个元素中指向字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52093193/

相关文章:

c++ - Microsoft CNG - 使用 BCrypt 函数在内存中创建自签名证书

C++ 查找数组中的最大数

javascript - 如何使用 ES6 HOF Javascript 在数组中查找重复对象(所有键值对应该相同)

java - Java中变量值从String到Long的转换

java - 是否可以反转子字符串的起点和终点?

jquery - 如何替换字符串的这一部分 - [

c++ - 对基于范围的for循环的误解?

c++ - 这种关系是聚合、组合还是其他?

c++ - 何时为可执行文件分配内核版本

php - 循环一个有间隙数字键的数组