array

Описание

Массив — это коллекция переменных, к которым обращаются по индексу. Массивы в языке программирования C++, на котором пишутся скетчи Arduino, могут быть сложными, но использование простых массивов относительно несложно.

Создание (объявление) массива

Все приведённые ниже способы являются допустимыми вариантами создания (объявления) массива.

// Объявить массив заданной длины без инициализации значений:
int myInts[6];

// Объявить массив без явного указания размера (компилятор
// подсчитает количество элементов и создаст массив подходящего размера):
int myPins[] = {2, 4, 8, 3, 6, 4};

// Объявить массив заданной длины и инициализировать его значения:
int mySensVals[5] = {2, 4, -8, 3, 2};

// При объявлении массива типа char нужно сделать его на один элемент длиннее,
// чтобы вместить требуемый нулевой завершающий символ:
char message[6] = "hello";

Доступ к массиву

Массивы индексируются с нуля, то есть, ссылаясь на инициализацию массива выше, первый элемент массива находится по индексу 0, поэтому

mySensVals[0] == 2, mySensVals[1] == 4,

и так далее.

Это также означает, что в массиве из десяти элементов индекс девять — это последний элемент. То есть:

int myArray[10]={9, 3, 2, 4, 3, 2, 7, 8, 9, 11};
// myArray[9]    содержит 11
// myArray[10]   недопустим и содержит случайную информацию (другой адрес памяти)

По этой причине следует быть осторожным при доступе к массивам. Доступ за пределы массива (с использованием индекса больше, чем размер объявленного массива минус 1) — это чтение из памяти, которая используется для других целей. Чтение из этих мест, вероятно, не приведёт ни к чему, кроме получения недействительных данных. Запись в случайные места памяти — определённо плохая идея и часто может привести к неприятным последствиям, таким как сбои или неправильная работа программы. Это также может быть трудно отслеживаемой ошибкой.

В отличие от BASIC или JAVA, компилятор C++ не проверяет, находится ли доступ к массиву в допустимых пределах объявленного вами размера массива.

Присваивание значения элементу массива:

mySensVals[0] = 10;

Получение значения из массива:

x = mySensVals[4];

Массивы и FOR-циклы

Массивы часто обрабатываются внутри циклов for, где счётчик цикла используется в качестве индекса для каждого элемента массива. Например, чтобы вывести элементы массива через последовательный порт, можно сделать что-то вроде этого:

for (byte i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}

Пример кода

Полную программу, демонстрирующую использование массивов, см. в примере How to Use Arrays из раздела Built-in Examples.

Смотрите также