【问题标题】:Why declaring an arrray of strings with a pointer? What really happens when doing it? [duplicate]为什么用指针声明一个字符串数组?这样做时会发生什么? [复制]
【发布时间】:2020-03-22 06:20:40
【问题描述】:

在 C 中,为什么我们要声明具有字符串的数组使用

char* arr[] = {"PYTHON","JAVA","RUBY","C++"};

而不是

char arr[] = {"PYTHON","JAVA","RUBY","C++"};

为什么它返回错误“char 数组初始化程序中的多余元素”,这是什么意思?还有第一个下面到底发生了什么?

【问题讨论】:

  • 一方面,char arr[] = {"PYTHON","JAVA","RUBY","C++"}; 肯定不会像您想象的那样做。如果您对警告或错误有任何疑问,总是逐字发布错误in your question,并描述您觉得混淆的部分。
  • 因为字符串实际上是 C 中的数组。

标签: c


【解决方案1】:

基本上,C 中的字符串是char 的数组。

由于C中数组和指针的对应关系,使用指向数组第一个元素的指针来引用数组是很常见也很方便的。

因此,虽然字符串基本上是 char 的数组,但使用指向 char 的指针来引用它们是很常见的。

所以char *arr[](类型为“指向char的指针数组”)是实现字符串数组的好方法。

你不会写

char arr[] = {"PYTHON", "JAVA", "RUBY", "C++"};

因为它是类型不匹配(并且相应地毫无意义)。如果你声明一个char 的数组,它的初始值设定项必须是字符。所以你可以这样做

char arr[] = { 'P', 'Y', 'T', 'H', 'O', 'N' };

或者,作为一种特殊的快捷方式,你可以这样做

char arr[] = "PYTHON";

初始化器是一个 single 字符串文字。这个字符串字面量是一个char 的数组,所以它是arr 的一个很好的初始化器,它是一个char 的数组。但是没有直接的方法可以将多个字符串(如您的原始问题)打包到一个 char 数组中。

当然,还有一个问题,那就是空终止。更准确地说,C 中的字符串是charnull 终止 数组。所以“特殊快捷方式”

char arr[] = "PYTHON";

实际上等价于

char arr[] = { 'P', 'Y', 'T', 'H', 'O', 'N', '\0' };

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 2013-04-13
    • 2015-02-21
    • 1970-01-01
    • 2017-06-15
    • 2014-08-07
    • 2015-06-15
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多