Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 289 Указатель автоматически учитывает этот факт. При увеличении зна чения указателя на единицу, он всегда указывает на следующий элемент массива, независимо от того, сколько байтов в памяти занимает каждый такой элемент. Теперь посмотрим, как используются указатели в программе. Допустим, у нас есть ссылочная переменная sper, которая содержит ука затель на начало массива mass. Тогда вместо выражения х = mass [1]; можно записать х = *sper; В данном случае символ * означает операцию обращения к содер жимому объекта, на который ссылается переменная sper. Если теперь увеличить значение переменной sper (например, при помощи команды sper++), то после этого выражение x=*sper присвоит переменной х значение уже следующего элемента массива (mass [2]). Как видите, применение ссылочных переменных позволяет обра титься к любому элементу массива альтернативным способом. Все удоб ство такого способа иллюстрирует как раз наш программный пример. Как вы помните, музыкальная шкатулка должна воспроизводить одну из семи мелодий. Разумеется, для каждой из мелодий мы создадим свой отдельный массив, куда поместим все коды нот. Однако программа должна выбрать одну из мелодий, то есть один из массивов, а затем именно из него извлекать ноты. При обычном способе доступа мы вынуждены конкретно указывать имя массива, с которым мы работаем. И мы не можем для разных мелодий указывать разные мас сивы. В других языках программирования в таких случаях используют двухмерный массив. Это полезно запомнить. Двухмерный массив — это массив, состоящий из нескольких наборов элементов (строк). Например, массив mass [ 5,10 ] будет состоять из пяти строк по десять элементов в каждой. Язык СИ тоже поддерживает двухмерные массивы. Для нашей задачи можно создать массив, имеющий семь строк, в каждой из которых будет храниться одна мелодия. Но в данном случае подобное решение будет иметь один недостаток. В двухмерном массиве все строки всегда имеют равную длину. А наши мелодии по длине разные. Конечно, можно выбрать длину для всех строк массива, равную длине самой длинной мелодии. Но это приведет к нерациональному использо ванию памяти.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==