Массивы — это группы однотипных данных, которые последовательно помещаются в память. Например, у нас может быть массив целых чисел (тип int), который состоит из двух или более целых чисел, встречающихся одно за другим.
Ключевым моментом здесь является то, что каждый элемент в массиве помещается непосредственно после предыдущего элемента, что позволяет нам обращаться к каждому элементу по очереди с помощью цикла.
Элемент в массиве относится к каждому значению в массиве. Если у нас есть массив целых чисел, то каждое отдельное целое число называется элементом массива. В массиве byte каждый элемент является байтом (байтового типа Arduino).
Использование массивов
В скетче ниже показано базовое использование массива:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
void setup() { int my_array[5]; // массив из 5 целочисленных элементов int i; // используется как индекс в массиве Serial.begin(9600); my_array[0] = 23; // присвоить значение 23 my_array[1] = 1001; // присвоить значение 1001 второму элементу и т.д. my_array[2] = 9; my_array[3] = 1234; my_array[4] = 987; // отображаем каждое число из массива в окне Монитор порта for (i = 0; i < 5; i++) { Serial.println(my_array[i]); } } void loop() { } |
Определение массива
В этом скетче определен массив из 5 элементов. Это освобождает место в памяти для 5 целых чисел, которые помещаются в память одно за другим. Значения, которые каждый элемент содержит после определения массива, могут содержать любые случайные данные — независимо от того, что в данный момент находится в памяти. Также возможно, что компилятор настроен на обнуление значений, но мы не можем полагаться на это.
Определение массива из 5 целых чисел:
1 |
int my_array[5]; // массив из 5 целочисленных элементов |
В этом примере массив имеет тип int, но может быть float, byte и т.д.
Массив имеет имя, которое указано в примере как my_array.
Массив имеет длину [5], что означает, что в памяти выделяется место для 5 последовательных целых чисел.
Присвоение значений элементам в массиве
Каждому элементу присваивается целочисленное значение путем ссылки на него с использованием квадратных скобок [] с номером элемента, к которому нужно получить доступ, в скобках.
1 2 3 4 5 |
my_array[0] = 23; my_array[1] = 1001; my_array[2] = 9; my_array[3] = 1234; my_array[4] = 987; |
Обратите внимание, что нумерация элементов начинается с нуля [0], а не с единицы [1], поэтому первым элементом в массиве является элемент 0.
Таким же образом последний элемент в массиве нумеруется на единицу меньше размера массива. В этом примере размер массива равен 5, поэтому номер последнего элемента равен 4 — опять же, это потому, что мы нумеруем элементы, начиная с 0.
Доступ к массиву в цикле (loop)
Цикл for используется для получения содержимого каждого элемента в массиве по очереди и вывода значений в окно терминала через вкладку Монитор порта.
1 2 3 |
for (i = 0; i < 5; i++) { Serial.println(my_array[i]); } |
Переменная i используется в цикле for как индекс в массиве для доступа к каждому элементу массива.
В цикле i инициализируется значением 0, а затем увеличивается на единицу каждый раз в цикле, так что он считается от 0 до 4. Цикл завершается, когда i становится равным 5.
Переменная i используется в массиве для получения значения, которое содержит элемент массива, начиная с элемента 0 и заканчивая 4.
1 |
(my_array[i]); |
В приведенном выше фрагменте кода, когда i равно 0, осуществляется доступ к первому элементу массива, и затем мы можем получить значение, которое он содержит, равное 23 в примере скетча.
Подробнее об инициализации массивов
Вместо инициализации каждого элемента в массиве по отдельности, массив можно определить и инициализировать в одной строке, как показано в коде ниже.
Этот скетч делает то же самое, что и предыдущий.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void setup() { int my_array[5] = {23, 1001, 9, 1234, 987}; int i; Serial.begin(9600); // отображаем каждое число из массива в окне Монитор порта for (i = 0; i < 5; i++) { Serial.println(my_array[i]); } } void loop() { } |
Значения для инициализации каждого элемента помещаются в фигурные скобки {} после оператора присваивания (знак равенства =). Первое значение между фигурными скобками будет присвоено первому элементу в массиве (элемент номер 0), второе число между фигурными скобками будет присвоено второму элементу в массиве (элемент номер 1) и т.д.
Код, который выполняет определение и инициализацию, также может быть написан без количества элементов в массиве между квадратными скобками:
1 |
int my_array[] = {23, 1001, 9, 1234, 987}; |
В этом случае компилятор определит, сколько элементов должен иметь массив, исходя из количества значений, которые используются для его инициализации.
Вывод
В этой статье показано, что массивы могут последовательно хранить в памяти переменные данных одного и того же типа, что обеспечивает к ним легкий доступ с помощью цикла.
Есть много применений массивов в программировании, например, массивы могут хранить данные, такие как температура. Строки, которые представляют собой текст, на самом деле являются массивами. Мы разберем это в следующей статье по программированию Ардуино.
С Уважением, МониторБанк