Учебники

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

Массивы могут быть объявлены как содержащие значения любого не ссылочного типа данных. Например, массив строк типа можно использовать для хранения строк символов.

Примеры использования массивов

В этом разделе приводится много примеров, демонстрирующих, как объявлять, инициализировать и манипулировать массивами.

Пример 1. Объявление массива и использование цикла для инициализации элементов массива.

Программа объявляет 10-элементный целочисленный массив n . Строки a – b используют оператор For для инициализации элементов массива нулями. Как и другие автоматические переменные, автоматические массивы неявно инициализируются нулем. Первый оператор вывода (строка c) отображает заголовки столбцов для столбцов, напечатанных в последующем операторе for (строки d – e), который печатает массив в табличном формате.

пример

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’) ;
   } 
}

Результат — это даст следующий результат —

Element Value

0

1

2

3

4

5

6

7

8

9

0

0

0

0

0

0

0

0

0

0

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).

пример

// 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’) ;
   } 
}

Результат - это даст следующий результат -

Element Value

0

1

2

3

4

5

6

7

8

9

32

27

64

18

95

14

90

70

60

37

0

1

2

3

4

5

6

7

8

9

32

27

64

18

95

14

90

70

60

37

Пример 3: суммирование элементов массива

Часто элементы массива представляют собой серию значений, которые будут использоваться в расчете. Например, если элементы массива представляют оценки за экзамен, профессор может пожелать суммировать элементы массива и использовать эту сумму для расчета среднего балла за экзамен. Программа суммирует значения, содержащиеся в 10-элементном целочисленном массиве a .

пример

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) ;
}

Результат - это даст следующий результат -

Total of array elements: 849

Массивы важны для Arduino и должны уделять гораздо больше внимания. Следующие важные понятия, связанные с массивом, должны быть понятны Arduino -

Чтобы передать аргумент массива в функцию, укажите имя массива без скобок.

Массивы с двумя измерениями (т.е. индексы) часто представляют таблицы значений, состоящие из информации, расположенной в строках и столбцах.