Light-electric.com

IT Журнал
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Массив в программировании

Website-create.ru

Занимаясь программированием, мы достаточно часто сталкиваемся с использованием массивов. У многих эта тема вызывает достаточно много трудностей из-за непонимания того: что из себя представляют массивы и как с ними работать. Однако, их использование было, есть и будет одной из наиболее важный частей написания программного кода. Именно поэтому, сегодня хотелось бы поговорить о массивах.
Как я уже сказала, массивы очень распространенная вещь. Наиболее часто, если говорить о разработке веб-сайтов, мы сталкиваемся с ними в php и JavaScript кодах. Конечно же, различия при работе с массивами в php и JavaScript имеются, но поняв, как работать с массивами в одном из языков программирования, разобраться, как работать в другом, не составит практически никакого труда.

В этой статье я буду говорить о массивах относительно языка php.

Что же такое массивы?

По определению, Массивэто нумерованный набор переменных.

Переменные в массиве – это элементы массива. Их позиция в массиве задается индексом.

Если понять это не очень просто, то представьте себе «волшебную» коробку. В ней Вы можете создавать сколько угодно отделов и складывать что-то в эти отделы. При необходимости, Вы можете: удалять отделы; создавать новые; вытаскивать и использовать содержимое, которое в них находится; заменять содержимое отдельных отсеков чем-то другим; Вы можете даже хранить в одном из отсеков другой массив, который также содержит разные отделы.

Таким образом, Массивэто тип данных, который содержит в себе набор элементов. Сразу хочется сказать, что элементы эти, если мы говорим о языке php, не обязательно должны являться однотипными!

Для чего нужны массивы?

Возможно, Вам не совсем понятно, для чего нужно использовать массивы.

Давайте представим один несложный пример.

Скажем, Вам нужно написать программу, которая будет считать среднее арифметическое число продаж за месяц (или за год). Для этого нам нужно знать число продаж за каждый день месяца и, соответственно, где-то эти данные хранить. Мы можем объявить 30 переменных (или 356, если речь идет о годе). Вы уже подсчитали сколько строк кода нужно будет написать?

Далее нам нужно написать формулу, которая будет считать среднее арифметическое. Для этого нужно сложить все переменные и поделить сумму на число дней. Не кажется ли Вам, что формула может получиться «слегка» громоздкой?

При всем при этом, объявляя такое большое число переменных, а потом подставляя все это в формулу немудрено допустить ошибку и наш результат будет некорректным. А что, если в один прекрасный момент нам понадобится узнать среднее арифметическое не за 30 дней, а, например, за полтора месяца? Нужно менять весь код!

Используя массив в этой ситуации, мы значительно облегчим себе жизнь. Ведь используя соответствующие функции, мы может узнать: число элементов массива, сумму элементов массива, мы можем хранить все данные о продажах в одном типе данных – массиве, и при этом нам не нужно будет создавать огромное количество переменных.

Это лишь один небольшой пример, который может помочь Вам понять – зачем же нужны массивы. На практике же, подобные задачи возникают постоянно. И если знать, как работать с массивами, то их решение становится гораздо более легким.

Чтобы научиться работать с массивами нужна практика и определенные знания. Я планирую написать серию статей, в которых и попытаюсь рассказать о разнообразных тонкостях, функциях и примерах. Так что эта статья – лишь начало знакомства с массивами.

Это следует помнить, работая с массивами!

Мы привыкли, что начало чего-либо отсчитывается с «1». Во многих ситуациях так оно и есть, но только не в ситуации с массивами.

Я уже говорила, что позиция элемента в массиве задается ее индексом. Так вот нумерация элементов массива начинается не с 1, а с 0. Это нужно всегда помнить, чтобы не допустить ошибок!

Также следует отметить, что Размером массива называют общее количество элементов в массиве.

Как объявить массив

Объявить (или инициализировать) массив можно несколькими способами.

Можно инициализировать массив поэлементно, указывая индекс.

Для этого сначала придумайте имя для Вашего массива. Например, дадим массиву имя «$Mass1». Теперь мы можем инициализировать массив и занести туда какие-то переменные.

Как Вы видите, сначала идет имя нашего массива (при объявлении не забываем знак «$»), далее квадратные скобки, в которых указывается индекс элемента, далее знак присваивания «=» и само значение элемента. В данном примере значения представляют собой целые числа, в конце точка с запятой.

Можно сделать тоже самое, но не указывая индексы. При этом php автоматически присвоит индекс для каждого следующего элемента на единицу больше последнего. Другими словами, добавит элемент в конец массива.

Но, как Вы заметили, квадратные скобки все же нужны. Php должен знать, что имеет дело с массивом.

Есть и другой способ, в котором не потребуются квадратные скобки и можно указать все элементы массива сразу в одну строку. Однако, вместо квадратных скобок потребуется специальное слово «array», которое и расскажет php о том, что мы имеем дело с массивом.

Делается это так:

Вот так мы можем создавать массивы и заполнять их различными элементами.

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

Мы научились создавать массивы. Давайте теперь поговорим о том, как можно получить и изменить определенный элемент массива.

Как получить и изменить элемент массива

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

При этом следует помнить, что индексация начинается с нуля.

Допустим у нас есть такой массив:

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

В итоге, на экране мы увидим значение первого элемента массива – «Маша».

При этом не забудьте, что для того, чтобы тестировать php-код на локальном компьютере, Вам нужно будет установить и запустить Денвер .

А также не забудьте, что весь php-код нужно писать между специальных символов объявления php. Таким образом полный код этого примера будет таким:

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

Также мы можем добавить элемент в массив или изменить уже существующий.

Чтобы добавить элемент в конец массива, достаточно прописать следующее:

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

И на последок давайте поговорим о размере массива.

Как узнать размер массива

Довольно часто для различных вычислений необходимо знать размер массива, другими словами, количество его элементов.

В php сделать это можно при помощи функции «count»:

Или при помощи функции «sizeof»:

Оба варианта выведут на экран значение – «5». Вы можете и не выводить это значение на экран, а просто занести его в переменную и потом использовать там, где Вам нужно.

Читать еще:  Как начать программировать на си

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

Если эта тема для Вас актуальна, то оставьте свой комментарий.

Также Вы можете поделиться статьей со своими друзьями при помощи кнопок социальных сетей, которые Вы найдете чуть ниже.

Если Вы еще не подписаны на обновления блога, то форма подписки также ниже.

Желаю Вам успехов и до встречи в следующих публикациях.

Что такое массивы в программировании и зачем они нужны?

Сегодня мы поговорим об одном из основополагающих понятий в программировании — о массиве.

Что мы подразумеваем под этим термином? Под ним мы понимаем переменную, представляющую собой сумму слагаемых, принадлежащих к одному типу. Если вы захотите применять массивы, то вам нужно будет заранее составить описание конкретного типа и указать доступ к каждому компоненту.

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

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

Всего массивы бывают двух видов — одномерные (линейные) и двухмерные

Если обращаясь к компонентам массива, выбудете использовать только его номер, то такой совокупности дается название одномерного. Еще одно его название – линейный. Визуально его можно представить как таблицу, где всего одна строка без различных делений и ячеек. Размер всего массива определяют по количеству индексов его компонентов.

Соответственно – двухмерный отличается тем, что у него два индекса, вместо одного.

Если обратиться к табличному виду, то первый индекс будет равен показателю строчки, а второй – показателю ячейки или столбика.

Как заполнить данные правильно?

Вы можете выбрать из нескольких способов заполнения, например, это можно проделать через оператор присваивания, он идеально подойдет, если все компоненты массива находятся под определенной зависимостью.

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

Что можно делать с компонентами массива?

Выстроить по убыванию или возрастанию (рассортировать);

Найти их значения;

Посчитать сколько компонентов подпадают под выставленные вами параметры.

При создании двух одинаковых совокупностей данных, есть возможность объединить их под именем одного их них.

Для начала работы с массивом, нужно его объявить. Как это сделать?

Для объявления массива и создания конкретной ячейки, предназначенной для последующего сохранения элементов, от вас потребуется задать размерность и придумать название. Выбираем «Массив» в качестве ключевого слова.

Допустим, C 77 подразумевает, что массив одномерен и состоит из 77 компонентов.

A 7,4 является двухмерным и визуализирован в табличной форме, насчитывающей 7 строчек, в каждой из которых по 5 ячеек.

Существуют ли какие-то ограничения при использовании одномерного массива? Да, мы можем создать и применять только 1000 компонентов. Примерно так же нас ограничивает и двухмерный массив — таблица будет представлена максимум 1000 столбиков с 1000 ячеек.v

Как правильно работать с массивами и что они могут нам дать?

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

Для создания двухмерного от вас потребуется обозначить два индекса. Как только вы даете конкретный индекс – компоненты можно называть индексированными переменными.

Какие бывают виды компонентов, индексов и имен?

Как создать имя для массива? Для этой цели можно применить произвольный идентификатор. У нас есть условия, что название нужно начинать с T. Именно так можно будет отличать каждый конкретный идентификатор от всех прочих.

Дальнейшую часть названия составляют, беря за основу переменные, хранящиеся в самом массиве.

Какие типы компонентов вы можете встретить? Для того, чтобы создать индекс, берите целые числа, а в качестве типа будет выступать весь числовой диапазон, между первым и последним компонентами массива.

Приведем простой пример: тип 1…777 будет значить, что созданный нами массив насчитывает 777 компонентов, где каждый из которых равен какому-либо числу от 1 до 777.

Надеемся, что мы смогли раскрыть вам основные термины и процессы при работе с массивами в программировании.

Если вы хотели бы научиться программированию, записывайтесь на наш курс по программированию. А может вы совершенно не хотите обучаться сами, но вам нужен качественный сайт – обсудим подробности.

Дадим формальное определение:

массив — структурированный тип данных, состоящий из некоторого числа элементов одного типа.

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

· Как описать массивв программе?

· Как инициализировать массив, то есть как задать начальные значения его элементов?

· Как организовать доступк элементам массива?

· Как организовать массивыс размерностью более одной?

· Как организовать выполнениетиповых операций с массивами?

Описание и инициализация массива в программе

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

1. Перечислением элементов массива в поле операндов одной из директив описания данных. При перечислении элементы разделяются запятыми. К примеру:

;массив из 5 элементов.Размер каждого элемента 4 байта:

2. Используя оператор повторения dup. К примеру:

;массив из 5 нулевых элементов.

;Размер каждого элемента 2 байта:

Такой способ определения используется для резервирования памяти с целью размещения и инициализации элементов массива.

3. Используя директивы labelиrept. Пара этих директив может облегчить описание больших массивов в памяти и повысить наглядность такого описания. Директиваreptотносится к макросредствам языка ассемблера и вызывает повторение указанное число раз строк, заключенных между директивой и строкой endm. К примеру, определим массив байт в области памяти, обозначенной идентификаторомmas_b. В данном случае директиваlabelопределяет символическое имяmas_b, аналогично тому, как это делают директивы резервирования и инициализации памяти. Достоинство директивыlabelв том, что она не резервирует память, а лишь определяет характеристики объекта. В данном случае объект — это ячейка памяти. Используя несколько директивlabel, записанных одна за другой, можно присвоить одной и той же области памяти разные имена и разный тип, что и сделано в следующем фрагменте:

mas_b label byte

mas_w label word

В результате в памяти будет создана последовательность из четырех слов f1f0. Эту последовательность можно трактовать как массив байт или слов в зависимости от того, какое имя области мы будем использовать в программе —mas_bилиmas_w.

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

5. Посмотрим на примере листинга 2, каким образом это делается.

Листинг 2 Инициализация массива в цикле

mes db 0ah,0dh,’Массив- ‘,’$’

mas db 10 dup (?) ;исходный массив

xor ax,ax ;обнуление ax

mov cx,10 ;значение счетчика цикла в cx

Читать еще:  Асинхронное программирование это

mov si,0 ;индекс начального элемента в cx

go: ;цикл инициализации

mov mas[si],bh ;запись в массив i

inc i ;инкремент i

inc si ;продвижение к следующему элементу массива

loop go ;повторить цикл

;вывод на экран получившегося массива

mov ah,02h ;функция вывода значения из al на экран

add dl,30h ;преобразование числа в символ

mov ax,4c00h ;стандартный выход

end main ;конец программы

Доступ к элементам массива

При работе с массивами необходимо четко представлять себе, что все элементы массива располагаются в памяти компьютера последовательно.

Само по себе такое расположение ничего не говорит о назначении и порядке использования этих элементов. И только лишь программист с помощью составленного им алгоритма обработки определяет, как нужно трактовать эту последовательность байт, составляющих массив. Так, одну и ту же область памяти можно трактовать как одномерный массив, и одновременно те же самые данные могут трактоваться как двухмерный массив. Все зависит только от алгоритма обработки этих данных в конкретной программе. Сами по себе данные не несут никакой информации о своем “смысловом”, или логическом, типе. Помните об этом принципиальном моменте.

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

Для того чтобы локализовать определенный элемент массива, к его имени нужно добавить индекс. Так как мы моделируем массив, то должны позаботиться и о моделировании индекса. В языке ассемблера индексы массивов — это обычные адреса, но с ними работают особым образом. Другими словами, когда при программировании на ассемблере мы говорим об индексе, то скорее подразумеваем под этим не номер элемента в массиве, а некоторый адрес.

Давайте еще раз обратимся к описанию массива. К примеру, в программе статически определена последовательность данных:

Пусть эта последовательность чисел трактуется как одномерный массив. Размерность каждого элемента определяется директивой dw, то есть она равна2байта. Чтобы получить доступ к третьему элементу, нужно к адресу массива прибавить6. Нумерация элементов массива в ассемблере начинается с нуля.

То есть в нашем случае речь, фактически, идет о 4-м элементе массива — 3, но об этом знает только программист; микропроцессору в данном случае все равно — ему нужен только адрес.

В общем случае для получения адреса элемента в массиве необходимо начальный (базовый) адрес массива сложить с произведением индекса (номер элемента минус единица) этого элемента на размер элемента массива:

база + (индекс*размер элемента)

Архитектура микропроцессора предоставляет достаточно удобные программно-аппаратные средства для работы с массивами. К ним относятся базовые и индексные регистры, позволяющие реализовать несколько режимов адресации данных. Используя данные режимы адресации, можно организовать эффективную работу с массивами в памяти. Вспомним эти режимы:

· индексная адресация со смещением — режим адресации, при котором эффективный адрес формируется из двух компонентов:

o постоянного (базового)— указанием прямого адреса массива в виде имени идентификатора, обозначающего начало массива;

o переменного (индексного)— указанием имени индексного регистра.

;поместить 3-й элемент массива mas в регистр ax:

· базовая индексная адресация со смещением — режим адресации, при котором эффективный адрес формируется максимум из трех компонентов:

o постоянного(необязательный компонент), в качестве которой может выступать прямой адрес массива в виде имени идентификатора, обозначающего начало массива, или непосредственное значение;

o переменного (базового)— указанием имени базового регистра;

o переменного (индексного)— указанием имени индексного регистра.

Этот вид адресации удобно использовать при обработке двухмерных массивов. Пример использования этой адресации мы рассмотрим далее при изучении особенностей работы с двухмерными массивами.

Напомним, что в качестве базового регистра может использоваться любой из восьми регистров общего назначения. В качестве индексного регистра также можно использовать любой регистр общего назначения, за исключением esp/sp.

Микропроцессор позволяет масштабировать индекс. Это означает, что если указать после имени индексного регистра знак умножения “*” с последующей цифрой 2, 4 или 8, то содержимое индексного регистра будет умножаться на 2, 4 или 8, то есть масштабироваться.

Применение масштабирования облегчает работу с массивами, которые имеют размер элементов, равный 2, 4 или 8 байт, так как микропроцессор сам производит коррекцию индекса для получения адреса очередного элемента массива. Нам нужно лишь загрузить в индексный регистр значение требуемого индекса (считая от 0). Кстати сказать, возможность масштабирования появилась в микропроцессорах Intel, начиная с модели i486. По этой причине в рассматриваемом здесь примере программы стоит директива .486. Ее назначение, как и ранее использовавшейся директивы.386, в том, чтобы указать ассемблеру при формировании машинных команд на необходимость учета и использования дополнительных возможностей системы команд новых моделей микропроцессоров.

В качестве примера использования масштабирования рассмотрим листинг 3, в котором просматривается массив, состоящий из слов, и производится сравнение этих элементов с нулем. Выводится соответствующее сообщение.

Листинг 3. Просмотр массива слов с использованием

#4 — Основные структуры данных

Сегодня мы продолжим наше увлекательное изучение основ программирования. Данный видеоурок посвятит вас в тайны структуры данных. Вы познакомитесь с переменными и массивами.

Что включает в себя структура данных

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

Переменная как разновидность структуры данных

Самая простая структура данных — это переменная. Переменная — это ячейка памяти, куда мы можем сохранить любые данные.

Для того чтобы создать (или объявить) переменную в javascript используется ключевое слово var, после которого через пробел записывается имя переменной. Для того чтобы записать значение в переменную, используется оператор присваивания «=». Переменные нужны, чтобы запоминать фрагменты данных в программе.

Лучшая ассоциация, которой можно описать переменную, это подписанная коробка или ящик для хранения. внутри которой мы кладем, что-то конкретное. Точно так же мы храним определенную информацию в определенной переменной в нашем коде, и эту переменную можно использовать в программе в дальнейшем.

Правила именования переменных

Существуют правила, как можно и как нельзя называть переменные:

  • — любые буквы и цифры можно использовать.
  • — имя не может начинаться с цифры,
  • — знаки, такие как -, /, # или @ использовать нельзя,
  • — проблемы использовать нельзя,
  • — знак подчеркивания (_) можно использовать вместо пробела,
  • — заглавные и строчные буквы различаются (Dogs и dogs — это разные переменные),
  • — нельзя называть переменные именами команд, например, print.

Нередко в программе нужно запоминать слова, например имя. Для этого пригодятся переменные. Еще такая программа может задать пользователю вопрос, ответ на который нужно вводить в текстовом окне.

Вторая основная структура данных — массив.

Массив — это набор фиксированного количества элементов ОДНОГО типа, имеющий возможность прочитать или записать элемент по индексу.

Если нужно держать много данных в одном месте, их можно поместить в массив. Если провести аналогию массива с примерами из жизни, можно представить себе большой шкаф с полками, на каждой из которых стоит определенный ящик.

В языке javascript (так как это язык со слабой и динамической типизацией) в массив можно добавлять любые переменные или типы данных: числа, строки, другие массивы или все это одновременно. Во многих других языках программирования (например в C) в массив можно добавлять только элементы одного типа данных.

Читать еще:  Программирование на уровне интерфейсов

Каждый элемент массива имеет свой индекс. Индекс обеспечивает прямой доступ к любому элементу массива. Элементами массива могут быть как простые, так и структурированные данные. Например, может быть массив массивов (многомерный массив). Число индексов определяет размерность массивов (одномерные, двумерные и т. д.).

Каждый элемент (если это тип данных «строка») записан в одинарных кавычках и отделен от следующего запятой. Весь массив заключен в квадратные скобки. Пример массива:

var mylist = [‘apple’, ‘milk’, ‘cheese’, ‘icecream’, ‘lemonade’, ‘tea’];

Отсчет списка массива идет с нуля.. В этом примере позиция (индекс) элемента apple («яблоко») равна 0.

Обо всем этом в мельчайших подробностях с приведением большого количества примеров будет рассказано на нашем видеоуроке.

Приятного всем просмотра! Учитесь с удовольствием!

Понятие массивов в программировании на C

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

Встраиваемые системы часто имеют дело с данными, которые принадлежат скорее к группе однотипных данных, а не к совокупности независимых переменных. Одним из примеров, который легко приходит на ум, является последовательность значений, которая соответствует оцифрованной версии аналогового сигнала. Другие примеры включают в себя байты, которые будут сериализованы и отправлены на LCD дисплей, длинный ряд измерений, которые должны быть проанализированы или переданы на другое устройство для обработки, и небольшая группа символов ASCII, которые составляют сообщение UART.

В некоторых случаях было бы возможно, хотя и неудобно, хранить эти данные в отдельных переменных – например, ADC_value1 , ADC_value2 , ADC_value3 и так далее. Однако часто использование отдельных переменных было бы совершенно непрактичным. К счастью, язык C предоставляет простой и очень эффективный способ работы с большими (или маленькими) группами переменных. Возможность, о которой я здесь говорю, называется массивом.

Что такое массив?

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

Рисунок 1 – Для массивов требуется указать тип данных, идентификатор и количество элементов

Вот несколько важных моментов, которые нужно понять о массивах:

  • Все элементы в массиве должны иметь одинаковый тип данных. Например, вы не можете иметь массив, который состоит из переменных char и int .
  • Объем памяти, необходимый для массива, не обязательно совпадает с количеством элементов. Если ваш массив имеет тип данных char и длину 20, он будет использовать 20 байт памяти. Однако если он состоит из 20 элементов с типом long , компилятор должен зарезервировать 80 байтов памяти. Большой массив может занимать значительную часть оперативной памяти микроконтроллера, поэтому убедитесь, что вы не используете излишне большой тип данных. Если все числа в массиве будут меньше или равны 255, объявите массив как unsigned char , а не int .
  • Компилятор будет хранить элементы массива в смежных местах памяти; у вас не будет такой ситуации, когда несколько элементов массива расположены в одном разделе вашей памяти, а затем остальные элементы массива – в совершенно другом разделе. Это означает, что вы можете легко проверить содержимое массива, используя возможности проверки памяти вашего интерфейса отладки (хотя сначала вы должны найти начальный адрес массива).

Как использовать массив

Массив объявлен так:

После того, как массив объявлен, любой элемент в массиве, используя идентификатор массива и соответствующий индекс, может быть считан или записан. Индекс – это число, заключенное в квадратные скобки. Компилятор выполняет необходимые математические операции с памятью, т.е. автоматически учитывает тип данных массива, когда определяет предполагаемый адрес на основе индекса и адреса первого элемента.

В следующем фрагменте кода используется цикл for для заполнения массива числовыми значениями, начинающимися с нуля и заканчивающимися на 99.

Нулевой элемент

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

Рисунок 2 – Первый элемент массива всегда является нулевым

Вам нужно проникнуться этим, если вы привыкли к другим языкам программирования, которые используют для первого элемента значение индекса, равное единице, или вы просто находите очень нелогичным, что доступ к «первому» элементу массива осуществляется с помощью числа ноль. Эту важную деталь вы можете запомнить, называя первый элемент нулевым элементом.

Соглашение об индексации в C на самом деле очень логично, если вы понимаете связь между массивами и аппаратным обеспечением. Идентификатор массива соответствует местоположению в памяти, а именно, начальному адресу массива. Индекс является смещением; он сообщает компилятору, к какой ячейке памяти обращаться со ссылкой на начальный адрес. Область памяти, соответствующая начальному адресу не пуста; она содержит данные, соответствующие первому элементу в массиве. Таким образом, индекс для первого элемента равен нулю, поскольку смещения нет – данные для этого элемента хранятся по начальному адресу.

Последний элемент

Еще один подводный камень, напрямую связанный с проблемой нулевого/первого элемента, заключается в том, что последний элемент массива соответствует индексу, равному размеру массива минус один.

Если вы используете размер массива в качестве индекса, вы получите доступ к памяти, которая не включена в массив. Это может быть что угодно – неиспользуемая память, начало другого массива, часть совершенной не связанной переменной. Это серьезная ошибка, которая может привести к сбою кода чрезвычайно проблемными способами. Будьте особенно осторожны с циклами, в которых индекс массива увеличивается с каждой итерацией. Цикл должен быть спроектирован таким образом, чтобы итерации прекращались до того, как индекс достигнет числа, равного размеру массива.

Инициализация массива

Массивам, как и отдельным переменным, могут быть заданы начальные значения. Последовательность значений заключается в фигурные скобки, а отдельные значения разделяются запятыми. Например:

Ранее я упоминал, что в объявление массива мы обычно включаем количество элементов. Я сказал «обычно», потому что, если вы включаете последовательность начальных значений, то можете позволить компилятору самому определить необходимую длину.

Это удобно, когда вы используете массив для хранения довольно длинной последовательности символов ASCII, возможно, для целей отладки или для связи через последовательный порт.

Обратите внимание, что символы заключены в двойные кавычки, и фигурные скобки не нужны.

Последовательность символов ASCII называется строкой, и обычной практикой является завершение строки нулевым символом ASCII. При инициализации строки, такой как показана выше, массив на один элемент длиннее, чем вы ожидаете потому, что компилятор автоматически включает нулевой символ в конце строки. Диаграмма ниже представляет содержимое памяти, созданное объявлением массива, показанным во фрагменте кода ниже.

Рисунок 3 – Представление содержимого памяти, созданного объявлением массива, показанным в приведенном выше фрагменте кода

Заключение

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

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×