【问题标题】:Simple 3D Array C++简单的 3D 数组 C++
【发布时间】:2013-10-10 07:44:32
【问题描述】:

我是 C++ 新手,我正在尝试创建一个简单的静态 3 维数组,然后在控制台中打印出来。

这是我当前的代码:

#include <iostream>
using namespace std;

int main()
{
  const int MAX_ROW = 2;
  const int MAX_COL = 2;
  const int MAX_HEIGHT = 2;

  int MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] = { {1,1},
                           {2,10},
                           {3,15},
                           {4,20},
                           {5,25},
                           {6,30},
                           {7,35},
                           {8,40} };

  for(int Row = 0; Row < MAX_ROW; ++Row)
  {
   for(int Col =0; Col < MAX_COL; ++Col)
   {
    for(int Height = 0; Height < MAX_HEIGHT; ++Height)
     {
      cout << "Integer["<< Row << "][" << Col << "][" << Height << "] = " << MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] << endl;
     }
    }
   }



  return 0;
}

当我编译时,编译器会通知我"error: too many initializers for ‘int [2][2][2]"

其他问题使用了我不熟悉的指针。

提前谢谢你!

编辑: 语法错误,因此我已使用正确的相应代码更正它,如下所示。现在在程序的输出中,每个数组空间都是 32767。一个完整的整数空间,而不是分配的值。任何人都可以在他们的答案中解决这个问题吗?除了初始化数组之外,我没有更改任何代码。

【问题讨论】:

  • 您正在分配行长为 2 的 3X3 数组。但您仅使用两个维度进行初始化,每个维度中有 8 个元素。添加第三个维度并在每个维度上使用更少的元素或增加每个维度的大小
  • 发布一个简洁、完整的示例程序的大 +1 - 这太罕见了!
  • 好问题。但是,在 C++ 中执行此操作的常规方法是分配一个连续的内存块并重载 operator () (unsigned,unsigned,unsigned) 以进行元素访问(const 和非 const 版本)。
  • 下班后别忘了用delete,看this

标签: c++ arrays


【解决方案1】:

你的语法错误。

int a[2][2][3] = {     // Initialize entire variable
  {                    //   1 of 2 (leftmost array)
    { 1, 2, 3 },       //     1 of 2 (inner array)
    { 4, 5, 6 },       //     2 of 2 (inner array)
  },

  {                    // 2 of 2 (leftmost array)
    { 7, 8, 9 },       //     1 of 2 (inner array)
    { 10, 11, 12 },    //     2 of 2 (inner array)
  },
}

您显示的是int [8][2]

【讨论】:

  • 这不是静态的吧?因为没有使用const int 定义每个数组的最大数量。
【解决方案2】:

按以下方式更改代码。您可以看到有 2 个组,其中包含两个元组,每个元组中有两个元素。

 int MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] = { 
                                               { {1,1},{2,10} }, 
                                               { {4,20},{5,25} } 
                                             };

看看下面的例子会更清楚

  int arr[2][3][4] = { 
                       { {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4} },
                       { {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4} } 
                     };

如您所见,有两组,每组包含三组,每组 4 个数字。

【讨论】:

  • 你能解释一下哪些整数是第 2 维和第 3 维吗?
  • 好的,我现在明白了。但是现在当我运行程序时,输出作为一个完整的 int 给出,表明数组中的每个空间都等于 32767!我从命令行使用 gcc 和命令 gcc -l stdc++ Arrays-v3.cpp 进行编译
  • 空格等于32767是什么意思?
  • 不是在命令行打印程序中分配的值,而是打印 32767 作为数组中的每个值。我不知道为什么。
【解决方案3】:

您声明了一个 2x2x2 数组,但将其定义为 2x8 数组。

此外,当您打印数组的内容时,您使用 MAX_* 作为索引而不是循环变量。

#include <iostream>

int main()
{
    const int MAX_ROW = 2;
    const int MAX_COL = 2;
    const int MAX_HEIGHT = 2;

    int MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] = {
        {
            {1,1}, {1,-1}
        },
        {
            {2,10}, {2,-10}
        }
    };

    for(int Row = 0; Row < MAX_ROW; ++Row)
        for(int Col =0; Col < MAX_COL; ++Col)
            for(int Height = 0; Height < MAX_HEIGHT; ++Height)
                std::cout << "Integer["<< Row << "][" << Col << "][" << Height << "] = " << MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] << std::endl;


  return 0;
}

【讨论】:

    【解决方案4】:

    你的数组MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT]只能容纳2*2*2=8个元素, 但是

    { {1,1},
                               {2,10},
                               {3,15},
                               {4,20},
                               {5,25},
                               {6,30},
                               {7,35},
                               {8,40} };
    

    有 16 个元素。 所以初始化器太多了

    【讨论】:

      【解决方案5】:

      除了其他人指出的错误数组初始化之外,您在打印时也有错误。您总是打印甚至不存在的相同元素(这是未定义的行为)。

      cout << "Integer["<< Row << "][" << Col << "][" << Height << "] = " << MyArray[Row][Col][Height] << endl;
      

      【讨论】:

        猜你喜欢
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-24
        • 1970-01-01
        • 2017-03-14
        • 1970-01-01
        相关资源
        最近更新 更多