Массивы

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

Создание (объявление) массива

Ниже представлены правильные способы создания (объявления) массивов.

  int myInts[6];
  int myPins[] = {2, 4, 8, 3, 6};
  int mySensVals[6] = {2, 4, -8, 3, 2};
  char message[6] = "hello";

Можно объявить массив без его инициализации, как myInts.

В myPins мы объявили массив без прямого указания его размера. Компилятор сам посчитает элементы и создаст массив соответствующего размера.

В конце концов, можно и проинициализировать массив, и указать его размер, как mySensVals. Следует помнить, что при объявлении массива типа char, в нем необходимо место для хранения обязательного нулевого символа, поэтому размер массива должен быть на один символ больше, чем требует инициализируемое значение.

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

Нумерация элементов массива начинается с нуля, т.е. первый элемент массива имеет индекс 0. Следовательно, применительно к проинициализированным выше массивам, 

mySensVals[0] == 2, mySensVals[1] == 4, и т.д.

Это также означает, что в массиве из 10 элементов, последний элемент имеет индекс 9. Следовательно:

int myArray[10]={9,3,2,4,3,2,7,8,9,11};
     // myArray[9]    содержит 11
     // myArray[10]   ошибочный результат, который может содержать случайные значения (из-за другого адреса памяти)      

Поэтому, необходимо быть внимательным при обращении к массивам. Обращение к элементу за пределами массива (когда указанный индекс больше, чем объявленный размер массива - 1) приведет к чтению данных из ячейки памяти, использующейся для других целей. Считывание из этой области, вероятно, не приведет ни к чему, кроме получения неверных данных. Запись же в случайные области памяти -  определенно плохая идея, и часто может приводить к не желаемым результатам, таким, как зависания или сбои в работе программы. Кроме того, такие ошибки трудно отыскать.

В отличие от BASIC или JAVA, компилятор C не проверяет правильность индексов при обращении к элементам массива.

Как записать значение в массив:

mySensVals[0] = 10;;

Как считать значение из массива:

x = mySensVals[4];

Массивы и циклы FOR

Работа с массивами часто осуществляется внутри циклов FOR, в которых счетчик цикла используется в качестве индекса каждого элемента массива. Например, программа вывода элементов массива через последовательный порт может выглядеть так:

int i;
for (i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}

Пример

Полную версию программы, демонстрирующую работу с массивами, смотрите в примере Knight Rider из раздела "Примеры".

Смотрите также