Объявление массива


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

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

Важный момент: размер глобального массива должен быть задан константой, то есть конкретным числом, константой const или константой #define. Дело в том, что размер глобального массива должен быть известен до начала выполнения программы, ведь он выделяется из памяти и рядом с ним живут другие глобальные переменные (подробнее о выделении памяти читайте в этом уроке):

// размеры
#define arr1_size 10
const byte arr2_size = 20;
byte arr3_size = 30;

// массивы
int arr0[5];
int arr1[arr1_size];
int arr2[arr2_size];
//int arr3[arr3_size];    // приведёт к ошибке!

Размер локального массива (созданного внутри функции) может быть задан переменной, потому что локальный массив выделяется из динамической памяти в процессе работы программы, и может быть любого размера:

void setup() {
  byte localArr_size = 10;
  int arrLocal[localArr_size];
}

Обращение к элементам


Обращение к элементу массива осуществляется точно так же, в квадратных скобках. Важно помнить, что счёт в программировании начинается с нуля, и первый элемент массива имеет номер 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]);

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

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

Видео


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