【问题标题】:Error defining and initializing multidimensional array定义和初始化多维数组时出错
【发布时间】:2011-04-23 20:02:51
【问题描述】:

我在使用以下定义进行编译时出错。

int  matrix[ ][ ] = { { 1, 2, 3}, {4,5,6} };

char str[ ][ ] = { "abc", "fgh" };

为什么编译器抱怨缺少下标和太多初始化器。

【问题讨论】:

    标签: c++ initialization multidimensional-array definition


    【解决方案1】:

    试试

    include <string>
    

    string str[] = { "abc", "fgh" };
    

    【讨论】:

    • 这可能需要在"abc, 之后加上" 并在最后加上;
    【解决方案2】:

    如果一个数组被定义为int arr[ ROWS ][ COLS ];,那么任何数组符号arr[ i ][ j ]都可以转换为指针符号

    *( arr + i * COLS + j )
    

    观察到表达式只需要 COLS,不需要 ROWS。 所以,数组 定义可以等价地写成

    int arr [][ COLS ];
    

    但是,遗漏第二个维度是不能接受的。

    通过下面给出的三个例子可以进一步理解。 在所有三个示例中,相同的数组符号 arr[ 2 ][ 3 ] 被转换为指针 符号。

    • 在 A 和 B 之间,ROWS 相同但 COLS 不同;结果 = 指针符号 不一样。

    • 在 A 和 C 之间,ROWS 不同但 COLS 相同;结果 = 指针表示法相同。

    例子:

    A. int arr[ 4 ][ 7 ];      arr[2][3] = arr + 2 * 7 + 3 = arr + 17
    B. int arr[ 4 ][ 5 ];      arr[2][3] = arr + 2 * 5 + 3 = arr + 13
    C. int arr[ 6 ][ 7 ];      arr[2][3] = arr + 2 * 7 + 3 = arr + 17
    

    【讨论】:

      【解决方案3】:

      int matrix[2][3] = { { 1, 2, 3}, {4,5,6} };
      char str[2][4] = { "abc", "fgh" };

      第一个声明将使 2d int 数组有 2 行和 3 列。
      第二个将制作具有 2 行和 4 列的 2d char 数组。 char 数组中每一行的第 4 个元素是 NULL char

      【讨论】:

        【解决方案4】:

        当你声明一个多维数组时,你必须明确定义除最后一个维度之外的所有维度的大小。否则,编译器将不知道如何在数组中查找给定值。

        编辑:阅读我的帖子here

        【讨论】:

        • 知道为什么编译器不能在分配之前通过计算初始化列表中的元素数量来计算大小。
        • 我在我链接到的另一篇文章中解释了它。
        猜你喜欢
        • 2018-10-07
        • 1970-01-01
        • 2015-08-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        相关资源
        最近更新 更多