【问题标题】:declaration of a Multidimensional array without index numbers声明没有索引号的多维数组
【发布时间】:2014-04-11 12:52:27
【问题描述】:

我想知道如何以这种方式声明 char 数组:

char szArray[]={"one"};
char szArrayTwo[][6]={{"one"},{"two"},{"three"}};

但是这种方式行不通

char szArrayTwo[][]={{"one"},{"two"},{"three"}};

注意:
我知道 c++ 标记,即使它应该是 c,但它在 c++ 上下文中与 c++ 编译器一起使用

【问题讨论】:

  • 编译器用您收到的错误回答了您的问题。在 C++ 和 C 中,在提供初始值设定项列表时,必须指定 all 但多维数组的最高维度。你的第二个 sn-p 没有这样做。与此相关的是,如果你想做你正在尝试的事情(一个常量字符串数组),你可以使用简单的const char *szArray[] = { "one", "two", "three" }; 来实现,即const char* 的简单数组。但请注意,这种定义中的字符串是不可写的。
  • 我刚刚查看了生成的错误消息,它们对我来说似乎并不那么“明显”:-missing subscript -array bounds overflow。当然不能写了
  • 你的第一个数组它们的元素都是可写的。我发布的那个数组是可写的(它只是一个指针数组),但其中的字符串是只读文字。缺少的下标消息是我提到的那个。我也希望错误消息更详细(谁没有?),但下标是您的代码有效和无效代码之间的唯一区别是一个非常强大的指标。

标签: c++ arrays visual-studio-2010 c++11 multidimensional-array


【解决方案1】:

事实上,它可以用于用作初始化器的常量表达式。但是在这种情况下,例如对于字符数组,编译器必须计算字符串文字的最大长度。如果数组是多维的,那就更难了。 如果在运行时计算初始化程序,任务将更加复杂。事实上,编译器不可能生成合适的代码。

【讨论】:

    【解决方案2】:

    在 c++ 中,二维或更多维数组必须始终定义最右边的维度。

    【讨论】:

    • 这是否也适用于 c 标准?
    • 必须定义全部或除一个以外的全部
    • 是的,必须声明维度
    • @Emi987: 你的说法看起来好像除了一个可以省略,而实际上最多可以省略一个。
    • 我的错,我的意思是,但我没有在我的维度中添加“s”。已编辑。谢谢!
    【解决方案3】:
    string ArrayOne[] { "one","two","three" };
    

    会起作用,也会起作用

    char* ArrayTwo[] { "one","two","three" };
    

    但真正的多维数组最多只能有一个未定义的维度大小(最左边)

    【讨论】:

      猜你喜欢
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 2012-01-02
      相关资源
      最近更新 更多