Arduino - Массивы
Массив - это последовательная группа ячеек памяти одного типа. Чтобы сослаться на определенное место или элемент в массиве, мы указываем имя массива и номер позиции конкретного элемента в массиве.
На приведенной ниже иллюстрации показан целочисленный массив C, содержащий 11 элементов. Для ссылки на любой из этих элементов указывается имя массива, за которым следует номер позиции конкретного элемента в квадратных скобках ([]). Номер позиции более формально называется индексом или индексом (это число указывает количество элементов от начала массива). Первый элемент имеет индекс 0 (ноль) и иногда называется нулевым элементом.
Таким образом, элементами массива C являются C [0] (произносится как «C sub zero»), C [1], C [2] и так далее. Наивысший индекс в массиве C равен 10, что на 1 меньше количества элементов в массиве (11). Имена массивов соответствуют тем же соглашениям, что и имена других переменных.
Нижний индекс должен быть целым или целочисленным выражением (с использованием любого целочисленного типа). Если программа использует выражение как нижний индекс, то программа оценивает выражение, чтобы определить нижний индекс. Например, если мы предположим, что переменная a равна 5, а переменная b равна 6, тогда оператор добавляет 2 к элементу массива C [11].
Имя массива с индексами - это lvalue, его можно использовать в левой части присваивания, как и имена переменных без массива.
Рассмотрим более подробно массив C на данном рисунке. Имя всего массива - C. Его 11 элементов обозначаются от C [0] до C [10]. Значение C [0] равно -45, значение C [1] равно 6, значение C [2] равно 0, значение C [7] равно 62, а значение C [10] равно 78.
Чтобы вывести сумму значений, содержащихся в первых трех элементах массива C, мы должны написать:
Serial.print (C[ 0 ] + C[ 1 ] + C[ 2 ] );
Чтобы разделить значение C [6] на 2 и присвоить результат переменной x, мы должны написать:
x = C[ 6 ] / 2;
Объявление массивов
Массивы занимают место в памяти. Чтобы указать тип элементов и количество элементов, необходимых для массива, используйте объявление формы -
type arrayName [ arraySize ] ;
Компилятор резервирует соответствующий объем памяти. (Напомним, что объявление, которое резервирует память, более правильно известно как определение). ArraySize должен быть целочисленной константой больше нуля. Например, чтобы указать компилятору зарезервировать 11 элементов для целочисленного массива C, используйте объявление -
int C[ 12 ]; // C is an array of 12 integers
Можно объявить массивы, содержащие значения любого не ссылочного типа данных. Например, для хранения символьных строк можно использовать массив типа string.
Примеры использования массивов
В этом разделе приводится множество примеров, демонстрирующих, как объявлять, инициализировать и манипулировать массивами.
Пример 1: Объявление массива и использование цикла для инициализации элементов массива
Программа объявляет целочисленный массив из 10 элементов n. Строки a – b используют aForоператор для инициализации элементов массива нулями. Как и другие автоматические переменные, автоматические массивы не инициализируются неявно нулем. Первый оператор вывода (строка c) отображает заголовки столбцов, напечатанных в последующем операторе for (строки d – e), который выводит массив в табличном формате.
Example
int n[ 10 ] ; // n is an array of 10 integers
void setup () {
}
void loop () {
for ( int i = 0; i < 10; ++i ) // initialize elements of array n to 0 {
n[ i ] = 0; // set element at location i to 0
Serial.print (i) ;
Serial.print (‘\r’) ;
}
for ( int j = 0; j < 10; ++j ) // output each array element's value {
Serial.print (n[j]) ;
Serial.print (‘\r’) ;
}
}
Result - Это даст следующий результат -
Element
Value
0
1
2
3
4
5
6
7
8
9
0
0
0
0
0
0
0
0
0
0
Пример 2: Инициализация массива в объявлении со списком инициализаторов
Элементы массива также можно инициализировать в объявлении массива, поставив после имени массива знак равенства и список инициализаторов, разделенных запятыми, разделенных фигурными скобками. Программа использует список инициализаторов для инициализации целочисленного массива с 10 значениями (строка a) и печатает массив в табличном формате (строки b – c).
Example
// n is an array of 10 integers
int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 } ;
void setup () {
}
void loop () {
for ( int i = 0; i < 10; ++i ) {
Serial.print (i) ;
Serial.print (‘\r’) ;
}
for ( int j = 0; j < 10; ++j ) // output each array element's value {
Serial.print (n[j]) ;
Serial.print (‘\r’) ;
}
}
Result - Это даст следующий результат -
Element
Value
0
1
2
3
4
5
6
7
8
9
32
27
64
18
95
14
90
70
60
37
Пример 3: Суммирование элементов массива
Часто элементы массива представляют собой серию значений, которые будут использоваться в вычислениях. Например, если элементы массива представляют оценки за экзамен, преподаватель может пожелать просуммировать элементы массива и использовать эту сумму для вычисления среднего класса за экзамен. Программа суммирует значения, содержащиеся в целочисленном массиве из 10 элементов.a.
Example
const int arraySize = 10; // constant variable indicating size of array
int a[ arraySize ] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 };
int total = 0;
void setup () {
}
void loop () {
// sum contents of array a
for ( int i = 0; i < arraySize; ++i )
total += a[ i ];
Serial.print (“Total of array elements : ”) ;
Serial.print(total) ;
}
Result - Это даст следующий результат -
Total of array elements: 849
Массивы важны для Arduino и требуют гораздо большего внимания. Следующие важные концепции, связанные с массивом, должны быть понятны Arduino:
С.НО. | Концепция и описание |
---|---|
1 | Передача массивов функциям Чтобы передать аргумент массива функции, укажите имя массива без скобок. |
2 | Многомерные массивы Массивы с двумя измерениями (то есть с индексами) часто представляют собой таблицы значений, состоящие из информации, упорядоченной по строкам и столбцам. |