PDA

Просмотр полной версии : [Вопрос] Enumerators (enums) - Обращение по индексу



vasyok28
22.04.2017, 12:40
Всем привет)
Столкнулся с такой задачей, нужно прогнать энум через цикл.

Пример:


enum Test
{
Nick1[MAX_PLAYER_NAME+1],
Nick2[MAX_PLAYER_NAME+1]
};
new NickTest[5][5][Test];


Обращение в данном случае идет по ключу энума:


NickTest[0][0][Nick1];
NickTest[0][0][Nick2];


А мне надо что-то типа такого (по индексу):


NickTest[0][0][0];
NickTest[0][0][1];


Раньше кажется делал такое, только подзабыл.

VVWVV
22.04.2017, 13:17
Можно сделать так:

NickTest[0][0][Test:0];

vasyok28
22.04.2017, 13:20
Можно сделать так:

NickTest[0][0][Test:0];

Так не будет работать

DeimoS
22.04.2017, 18:48
В enum массив - это лишь набор констант, что идут друг за другом.

То бишь, вот этот код:

enum Test
{
Nick1[5],//1 член перечисления
Nick2[5]//2 член перечисления
};
new test[Test];
Будет равносилен этому:

enum Test
{
Nick1_1,//1 член перечисления
Nick1_2,//2 член перечисления
Nick1_3,//3 член перечисления
Nick1_4,//4 член перечисления
Nick1_5,//5 член перечисления
Nick2_1,//6 член перечисления
Nick2_2,//7 член перечисления
Nick2_3,//8 член перечисления
Nick2_4,//9 член перечисления
Nick2_5//10 член перечисления
};
new test[Test];

И когда ты, например, обращаешься к Nick2 в первом случае:

test[Nick2];
Ты обращаешься не к массиву Nick2, а к 6-ому члену перечисления "Nick2_1".


Короче, в enum нет массивов в обычном виде. Этот код:

enum Test
{
Nick1[5],//1 член перечисления
Nick2[5]//2 член перечисления
};
new test[Test];
Не обозначает то, что ты создал двумерный массив test. Он означает лишь то, что ты создал одномерный массив из 10 ячеек. А уже константы "Nick1" и "Nick2" хранят в себе номера ячеек (0 и 5), которые как бы делят этот одномерный массив на две части.
То же самое можно вручную сделать так:

new test[10];
main()
{
strcat(test[0], "Test", 5);// Указываем, что запись в массив начинается с нулевой ячейки (текст займёт место с нулевой по 4-ую ячейку)
strcat(test[5], "Text", 5);// А тут указываем, что запись в массив начинается с пятой ячейки (текст займёт место с пятой ячейки по 9-ую)
}
И в 1 массиве будет 2 разных текста хранится.



Скажи что ты конкретно хочешь сделать и мы уже подскажем тебе решение