Попытка создать массив массивов в C - PullRequest
0 голосов
/ 20 февраля 2012

Итак, у меня есть куча логических массивов, которые я хотел бы поместить в один массив для более легкого доступа, но по некоторым причинам это не совсем работает.

Мои массивы выглядят так:

boolean l1_000[8] = {1,0,0,0,0,0,0,0};

Я объявляю свой массив массивов с:

boolean level1[8];

А потом я решил, что смогу использовать любой из этих двух (первый из которых - просто объявить эти массивы непосредственно там, где я их установил в большом массиве):

level1[0] = {1,0,0,0,0,0,0,0};
level1[0] = l1_000;

Я также попробовал level1 [8] [], но это тоже не сработало. Так что я тут делаю не так? Как бы я это сделал?

РЕДАКТИРОВАТЬ: Таким образом, мне удалось сделать это, объявив массив как логическое * level1 [8], но это позволяет мне только сделать level1 [0] = l1_000. Есть ли способ, которым я могу сделать level1 [0] = {1,0,0,0,0,0,0,0}?

Ответы [ 2 ]

5 голосов
/ 20 февраля 2012

Вы не можете объявить массив массивов, если хотите сохранить уже созданные массивы без копирования каждого элемента, но вы можете объявить массив указателей:

boolean* level1[] = {
    l1_000, // the array name decays to a pointer to the first element
    l2_000,
    // etc
};
1 голос
/ 20 февраля 2012

Мой C-fu довольно слабый, но вы должны сделать это:

int l1_000[8] = {1,0,0,0,0,0,0,0}; // one row
int level1[8][8];// 8 high, 8 wide
memcpy(level1[0], l1_000, sizeof(int)*8); // size of int * number of memory elements

В основном выполнение int variable[] будет использоваться только тогда, когда вы инициализируете его прямо тогда, а в других случаях это не будет работать.

также устанавливает позицию массива следующим образом

level1[0] = l1_000;

не работает, потому что вы пытаетесь установить первый элемент в качестве массива.

...