Массивы


Массив (array) – это совокупность переменных одного типа, к которым обращаются с помощью общего имени и индекса, т.е. номера элемента в массиве. По сути это набор переменных, которые называются одним именем и имеют личные номера. Для объявления массива достаточно указать квадратные скобки после имени переменной, тип данных – любой. Самый важный момент при всём этом – компилятор должен заранее знать, сколько ячеек будет содержаться в массиве, т.к. во время работы программы это количество не может меняться, потому что под массив выделяется память, и он находится в памяти например между двумя другими переменными. Размер массива – величина фиксированная (если это не динамический массив. Но с таким на Ардуино не работают). Указать компилятору размер массива можно двумя способами: явным числом в квадратных скобках, либо при объявлении сразу присвоить в каждую ячейку значение, тогда компилятор сам посчитает их количество. Рассмотрим пример объявления массива разными способами:

// указываем количество ячеек и всё, дальше можно с ними работать
int myInts[6];
// указываем содержимое ячеек, компилятор сам посчитает их количество
int myPins[] = {2, 4, 8, 3, 6};
// указываем и то и то, количество ячеек в [ ] должно совпадать с { } или быть больше!
float Sens[3] = {0.2, 0.4, -8.5};
// храним символы
char message[6] = "hello";

Обращение к элементу массива осуществляется точно так же, в квадратных скобках. Важно помнить, что счёт в программировании начинается с нуля, и первый элемент массива имеет номер 0 (ноль):

// записать в ячейку 3 массива myPins
// значение элемента №0 массива myInts
myPins[3] = myInts[0];

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

// двумерный массив, 5 строк 10 столбцов
byte myTable[5][10];

// матрица 3х3
byte myMatrix[][3] = {
  {10, 11, 12},
  {13, 14, 15},
  {16, 17, 18},
};

Очень важно помнить, что при объявлении массива с вручную вписанными данными нужно обязательно указать размер количества ячеек в измерении на 1 меньше размерности массива (для двумерного – обязательно указать размер одного из измерений, для трёхмерного – два, и т.д.).

В рассмотренном выше двумерном массиве myMatrix элемент с адресом 0, 2 (строка 0 столбец 2) имеет значение 12. Обращение к этому элементу например с целью перезаписи будет выглядеть так:

// меняем 12 на 20, ячейка 0,2
myMatrix[0][2] = 20;

Очень полезным бывает массив строк (массивов букв), позволяющий упорядоченно хранить названия пунктов меню или других подобных вещей. Такой массив должен быть объявлен при помощи адресного оператора * (звёздочка):

const char *names[]  = {
  "Period",   // 0
  "Work",     // 1
  "Stop",     // 2
};

Обращение к names[2] поможет вывести слово Stop в монитор порта или на дисплей, например

// вывести в порт слово Stop
Serial.println(names[2]);

Но к этому мы ещё вернёмся в будущем.

С элементами массивов можно производить такие же действия, как с обычными переменными, т.е. всю математику, которую мы рассматривали в предыдущем уроке, также не стоит забывать, что массивом может быть почти любой тип данных: целочисленные, дробные, массив структур… Область видимости точно так же применяется к массивам, ведь массив – это обычная переменная. 

Видео


Важные страницы


  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макро, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
Массивы
5 (100%) 1 vote[s]
Последнее обновление Май 06, 2019
2019-05-06T11:12:04+03:00