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.