Массивы представляют собой именованный набор переменных одного типа, с возможностью доступа к отдельным элементам по их индексу.
Объявление массива
Массив может быть объявлен следующим образом (смотри примеры ниже):
- массив может быть объявлен без непосредственной инициализации элементов массива, как в случае массива array;
- массив может быть объявлен без явного задания размера, как в случае массива pins. Компилятор сам посчитает фактическое количество элементов и создаст в памяти массив нужного размера;
- размер массива может быть задан явно, одновременно с инициализацией элементов массива. Обратите внимание, что при создании массива типа char, необходим дополнительный элемент массива для нулевого символа. Подробнее в разделе строки.
Примеры:
1 2 3 4 |
int array [6]; int pins [] = {3, 4, 6}; int numbers [3] = {-3, -2, 1}; char name [10] = "Robohobby"; |
Доступ к элементам массива
Как и в обычном C/C++, индексация массива начинается с нуля. Это значит, что для массива с 4-я элементами, последним будет индекс №3.
1 2 3 4 |
int new_array [4]={0, 1, 2, 3}; // new_array [0] первый элемент равен 0 // new_array [39] последний элемент равен 3 // new_array [4] !!! ошибка, возможно возвращение произвольного значения из области памяти не относящийся к массиву |
Для того, чтобы присвоить значение элементу массива используется следующая конструкция:
1 |
имя массива [индекс] = присваиваемое значение; |
Пример:
1 2 |
int massiv [3] ={32, 16, 8}; massiv [1] = 0; // {32, 0, 16} |
Для того, чтобы получить значение элемента массива используется следующая конструкция:
1 |
тип данных массива = имя массива [индекс]; |
Пример:
1 2 |
int massiv [3] = {32, 16, 8}; // объявление массива int element = massiv [1]; // = 16 |
«Проход» по массиву
Очень часто для перебора элементов цикла используется цикл for, счетчик цикла используется как индекс для доступа к каждому элементу массива.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 |
byte x [4] = {0, 1, 2, 3}; // объявление массива void setup() { Serial.begin(9600); // инициализация последовательного порта на скорости 9600 бод } void loop() { for (byte i = 0; i < 4; i++) Serial.println(x [i]); //вывод элементов массива в последовательный порт delay(5000); // задержка 5 секунд } |
В данном примере объявляется и инициализируеся массив типа byte. В функции setup() инициализируется последовательный порт на скорости 9600 бод. В функции loop() реализован алгоритм вывода элементов массива в последовательный порт (COM-порт).