C++ 创建二维阵列的阵列

C++ 创建二维阵列的阵列,c++,arrays,initialization,C++,Arrays,Initialization,如果我用C写以下内容++ uint8_t empty[2][2] = {{0,0},{0,0}}; 然后尝试创建一个由这些空数组组成的数组 uint8_t empty[][2][2] = {empty, empty, empty}; 我得到警告说 错误:必须使用大括号内的初始值设定项初始化数组 那么,我如何初始化一个由2个dim阵列组成的阵列呢?如果您必须: #define EMPTY {{0,0},{0,0}} uint8_t empty[][2][2] = {EMPTY, EMPTY,

如果我用C写以下内容++

uint8_t empty[2][2] = {{0,0},{0,0}};
然后尝试创建一个由这些空数组组成的数组

uint8_t empty[][2][2] = {empty, empty, empty};
我得到警告说

错误:必须使用大括号内的初始值设定项初始化数组

那么,我如何初始化一个由2个dim阵列组成的阵列呢?

如果您必须:

#define EMPTY {{0,0},{0,0}}
uint8_t empty[][2][2] = {EMPTY, EMPTY, EMPTY};
然而,如果你问我的话,堆积原始数组会让你的代码很快变得一团糟


更好地将数组封装在一个类中,这样调用者就可以对你打算用它做什么有一个功能描述,而不是处理它的实现细节。

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

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;
uint8\u t**empty=新uint8\u t*[2];
空[0]=新单元8_t[2];
空[1]=新单元8_t[2];
uint8_t***空=新uint8_t**[3];
int i,j;

对于(i=0;我为什么要把它标记为
c
?我的意思是,如果没有关于
c
的任何东西,那么就应该去掉标记。@Bаааћ足够公平,但没有足够的人受到讽刺,很遗憾。我笑了+1。粉碎你的昵称大大增强了你的评论,粉碎的梦想会更好!你有什么理由不想封装你的昵称吗类中的二维数组?拥有数组的数组将很快使代码无法维护。它也应该是“c”可编译的。@c/c++是未定义的行为。