Разработчик
Проверенный
Участник
Пользователь
- Сообщения
- 207
- Реакции
- 420
- Помог
- 10 раз(а)
Введение в программирование на SourcePawn. Массивы.
Массивы - некий упорядоченный набор переменных одного типа. В SourcePawn массивы бывают двух типов:
- Фиксированного размера. При инициализации, у него указывается строгий размер. При этом компилятор для этих массивов по прежнему разрешает использовать свою инструкцию
sizeof()
. - Динамического размера. По сути, то же самое, но компилятор уже на таких не даёт применять
sizeof()
: он сам не знает размер массива, который в итоге выйдет.
Handle
, и рассмотрим мы его позже.Посмотрим теперь, как объявляются массивы.
Код:
int iArray[64]; // массив фиксированного размера
int[] iData; // массив динамического размера. он может быть когда угодно инициализирован, и размер его достоверно не известен.
new
.
Код:
int[] iData = new int[64]; // массив размером 64
// следующую махинацию компилятор Вам сделать не разрешит. это надо иметь ввиду.
int[] iData;
// вызов неких функций...
iData = new int[64];
Код:
int iSize = 64;
// error 161: brackets after variable name indicate a fixed-size array, but a dynamic size was given - did you mean to use 'new int[size]' syntax?
int iData[iSize];
// all ok.
int[] iData = new int[iSize];
Однако в случае с константными размерами - не сообщит. Ему в принципе всё равно.
Применение
Когда используются массивы? Для хранения некоторых данных одного типа.
Самый банальный пример, как делать не стоит, и как лучше:
Код:
// не красиво, но верно, допустимо.
ConVar g_hCvar1;
ConVar g_hCvar2;
ConVar g_hCvar3;
ConVar g_hCvar4;
ConVar g_hCvar5;
ConVar g_hCvar6;
// ...
ConVar g_hCvar100;
// намного проще и элегантнее.
ConVar g_hCvars[100];
100
, получить доступ к конкретно 100
-ому элементу по индексу 100
не выйдет. Отсчёт в массивах начинается с нуля (0
), и сотый элемент расположился на 99
индексе.Ещё один пример: хранение состояния успешности авторизации в неком плагине.
Код:
bool g_bAuthorized[MAXPLAYERS+1];
+1
здесь служит как "костыль для упрощения", чтобы обращаться напрямую по индексу игрока, и не использовать нулевой индекс никак.Вот рассматриваем мы здесь объявление, применение массивов, а как обращаться к нужному индексу так и не решили. Так рассмотрим.
Для обращения к нужному индексу массива используются "брекеты" (
[
и ]
). В самих брекетах указывается необходимый индекс элемента.Например,
iArray[1]
вернёт значение, хранящееся в первом индексе (или втором).Рассмотрим практические примеры использования в теме циклов. Там куда больше практики возможной будет.
Последнее редактирование: