创建二维数组

Posted

技术标签:

【中文标题】创建二维数组【英文标题】: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++ 是未定义的行为。 【参考方案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;

【讨论】:

以上是关于创建二维数组的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中如何创建一个二维数组,然后给二维数组赋值!

创建二维数组(一维长度3,二维长度6),值为一维数组和二维数组索引值的积

创建二维数组(一维长度3,二维长度6),值为一维数组和二维数组索引值的积,

java中的二维数组怎样创建?

利用c++中的vector创建动态二维数组

JavaScript数组二维数组及相关练习