Array

Материал из MK90.ORG wiki
Перейти к: навигация, поиск

Справка Язык | Библиотеки | Сравнение | Изменения

Массивы

Описание

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

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

Все нижеперечисленные методы - правильные способы объявления массива.


  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, требуется на один элемент больше - для хранения закрывающего нулевого символа.

Доступ к массивам

Индекс массива всегда начинается с нуля, для вышерассмотренного объявления верно следующее:

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

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

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

Пример

Подробный пример законченной программы с использованием массивов - Knight Rider из раздела Tutorials

Смотри также

Руководство по Wiring


Исправления, пожелания и новые статьи должны быть опубликованы через Форум.

Оригинальные тексты руководств и переводы распространяются Arduino и MK90 на условиях лицензии Creative Commons Attribution-ShareAlike 3.0 License. Примеры исходных кодов и ссылки являются общественным достоянием.