2014-01-08 8 views
1

Если я пишу следующее C++Создание массива 2D массивов

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

и попытаться создать массив этих пустых массивов,

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

Я получаю предупреждение, что

error: array must be initialized with a brace-enclosed initializer

так как холодно я инициализирую массив из 2 тусклых массивов?

+0

Почему это помечено как 'c'? Я имею в виду, если это ничего не касается 'c', тег должен быть удален. – luk32

+1

'C/C++' не является реальным. – crush

+1

@ BЈовић Достаточно честный, но недостаточно людей поймали сарказм, к сожалению. Я рассмеялся. сокрушить ваш ник, значительно улучшит ваш комментарий, сокрушенный сон станет еще лучше! – luk32

ответ

0

Если вы должны:

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

Однако нагромождение сырые массивы сделает ваш код беспорядок в кратчайшие сроки, если вы спросите меня.

Лучше инкапсулируйте свой массив в классе, чтобы вызывающие могли иметь функциональное описание того, что вы намерены делать с ним, вместо того, чтобы справляться с его деталями реализации.

0

Вы можете объявить переменные как указатели и динамически распределять память.

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; 
Смежные вопросы