创建二维数组
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;
【讨论】:
以上是关于创建二维数组的主要内容,如果未能解决你的问题,请参考以下文章
创建二维数组(一维长度3,二维长度6),值为一维数组和二维数组索引值的积