# Массивы

**Массивы** представляют собой последовательный набор элементов одного типа (тип массива). К каждому элементу массива можно обратиться используя его индекс (порядковый номер элемента в массиве). Нумерация элементов начинается с нуля. Массивы доступны в San Andreas, LCS и VCS.

## Общий синтаксис

San Andreas:

```pascal
<имя массива>(<индекс>,<размер><тип>)
```

`<имя массива>`: локальная или глобальная [переменная](https://docs.sannybuilder.com/ru/coding/variables)\
`<индекс>`: локальная или глобальная переменная, содержащая индекс элемента, который нужно прочитать или изменить\
`<размер>`: целое число от 1 до 255 (включительно)\
`<тип>`: одна из букв `i` `f` `s` `v`:

| Буква | Тип элемента      | Размер элемента (в байтах) |
| ----- | ----------------- | -------------------------- |
| i     | целое число       | 4                          |
| f     | дробное число     | 4                          |
| s     | строковый литерал | 8                          |
| v     | строковый литерал | 16                         |

Пример:

```pascal
$index = 0
$array($index,10i) = 1
```

Liberty City Stories, Vice City Stories:

```pascal
<имя массива>(<индекс>,<размер>)
```

В LCS и VCS длина элементов массивов может быть только 4 байта. Поэтому нет необходимости указывать тип массива при обращении к его элементам.

Пример:

```pascal
$index = 0
$array($index,10) = 1
```

## Объявление массивов <a href="#array-declaration" id="array-declaration"></a>

Массивы, как и отдельные [переменные](https://docs.sannybuilder.com/ru/coding/variables), могут быть объявлены при помощи ключевого слова `var`:

```pascal
var <имя массива>: array <размер> of <тип>
```

Пример:

```pascal
var $FloatArray: array 10 of Float
```

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

```pascal
<тип> <имя массива>[<размер>]
```

Допустимыми типами в таком объявлении являются `Int`, `Float`, `String`, `LongString`:

```pascal
int intArray[10]
float floatArray[10]
string stringArray[10]
longstring longStringArray[10]
```

### Обращение к элементам массива после объявления <a href="#accessing-array-elements" id="accessing-array-elements"></a>

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

```pascal
var $FloatArray: array 10 of Float

$index = 0

// увеличить значение первого элемента на 100
$FloatArray[$index] += 100.0

// аналогично
$FloatArray[0] += 100.0
```

С массивами, содержащими [строковые литералы](https://docs.sannybuilder.com/ru/data-types#strokovye-literaly), можно работать используя [строковые переменные](https://docs.sannybuilder.com/ru/data-types#strokovye-peremennye): &#x20;

```pascal
// задаем значения для первых трех элементов массива $strings
s$strings[0] = 'str1'
s$strings[1] = 'str2'
s$strings[2] = 'str3'
```

Массив может быть объявлен как коллекция [экземпляров класса](https://docs.sannybuilder.com/ru/classes#ekzemplyary-klassa), его методы будут доступны для каждого элемента:

```pascal
var $players: array 2 of Player

$players[0].Build 
```

{% hint style="info" %}
По умолчанию в [режиме](https://docs.sannybuilder.com/ru/edit-modes) `GTA SA` дизассемблер выводит элементы массива с целочисленными константами. В LCS и VCS эта возможность присутствует, но по умолчанию выключена. [Отладочная опция](https://docs.sannybuilder.com/ru/editor/console#constant_indexes) `CONSTANT_INDEXES` позволяет включить или выключить эту возможность.&#x20;
{% endhint %}
