【问题标题】:Create an array of 2D arrays创建二维数组
【发布时间】:2014-01-08 15:00:30
【问题描述】:

如果我用 C++ 编写以下代码

uint8_t empty[2][2] = {{0,0},{0,0}};

并尝试创建一个由这些空数组组成的数组,

uint8_t empty[][2][2] = {empty, empty, empty};

我收到警告

错误:数组必须用大括号括起来的初始化器进行初始化

那么我初始化一个由 2 个暗淡数组组成的数组有多冷?

【问题讨论】:

  • 为什么标记为c?我的意思是,如果没有关于 c 的内容,则应该删除该标签。
  • @BЈовић 很公平,但遗憾的是,没有足够多的人受到讽刺。我笑了+1。粉碎你的昵称大大提升你的评论,粉碎的梦想会更好!
  • 您是否有不想将二维数组封装在一个类中的原因?拥有数组数组的数组将很快使代码无法维护。
  • 它也应该是 "c" 可编译的。
  • @crush C/C++ 是未定义的行为。

标签: c++ arrays initialization


【解决方案1】:

如果你必须:

#define EMPTY {{0,0},{0,0}}
uint8_t empty[][2][2] = {EMPTY, EMPTY, EMPTY};

但是,如果你问我,堆积原始数组很快就会让你的代码变得一团糟。

最好将您的数组封装在一个类中,以便调用者可以对您打算如何处理它进行功能描述,而不是处理其实现细节。

【讨论】:

    【解决方案2】:

    您可以将变量声明为指针并动态分配内存。

    uint8_t **empty=new uint8_t*[2];
    empty[0]=new uint8_t[2];
    empty[1]=new uint8_t[2];
    
    uint8_t ***Empty=new uint8_t**[3];
    int i,j;
    
    for (i=0;i<2;i++)
        for (j=0;j<2;j++)
            empty[i][j]=0;
    
    for (i=0;i<3;i++)
    {
        *(Empty+i)=empty;
    }
    
    
    //do some work
    
    
    //delete the allocated memory
    delete []empty[0];
    delete []empty[1];
    delete []empty;
    delete []Empty;
    

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 2011-10-19
      • 1970-01-01
      • 2013-02-22
      • 2011-08-14
      • 2012-03-23
      • 2011-12-23
      • 1970-01-01
      相关资源
      最近更新 更多