русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Массивы

Массив – это набор данных одного типа, собранных под одним именем.

Форма объявления массива:

класс_памяти тип список_массивов;

Поле класс_памяти определяет класс памяти массива и является необязательным. Поле тип является обязательным и определяет тип элементов массива. Все элементы массива должны быть одного типа. Элементами могут быть: переменные базового типа, константы перечислимого типа, структуры, объединения, указатели, массивы. Элементами массива не могут быть: переменные типа void, функции. Поле список_массивов является обязательным и содержит одно или несколько объявлений массивов, разделённых запятыми.

Форма объявления массива в поле список_массивов:

имя[размер1][размер2]…[размерN]={список_инициализаторов}

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

Возможна ещё вторая форма объявления массива в поле список_массивов (на примере одномерного массива):

имя[]={список_инициализаторов}

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

Элементы массива имеют свои порядковые номера (индексы), определяющие их положение в массиве. Для обращении к элементу массива в программе используется операция «обращение к элементу массива». Форма записи:

операнд[операнд 1][операнд2]…[операндN]

Операнд – это идентификатор массива, операнд1-операндN – номера элемента массива по соответствующей координате (индексы). Если координат несколько, обращение производится по каждой координате. Под массив выделяется непрерывное место в оперативной памяти, элементы массива располагаются друг за другом в порядке возрастания индексов элементов. Объем памяти, занимаемой массивом, можно вычислить по следующей формуле:

количество_байт=размер_типа*количество_элементов

При обращении к элементам массива индексы массива изменяются от 0 до L-1, где L – размер массива по координате соответствующей мерности массива. Индекс элемента массива – это не его порядковый номер, а смещение относительно начала массива.

Пример 1

Расположение в памяти массива из 5 элементов a[5] с указанием их индексов, L=5.

a[0] a[1] a[2] a[3] a[4]

Первый элемент будет располагаться по индексу 0 (a[0]), соответствующему нулевому смещению от начала массива, второй элемент – по индексу 1 (a[1]), а последний, пятый – по индексу 4 (a[4]).

Пример 2

Логическое расположение в памяти элементов двумерного массива a[2][3], L1=2, L2=3.

a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]

Так как память ЭВМ имеет линейную структуру адресации, то в памяти элементы массива будут расположены последовательно в следующем порядке.

a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]

Общее правило расположения в памяти элементов N-мерного массива: сначала в памяти всегда будут расположены элементы с наименьшими значениями n-1 индекса в порядке возрастания значений n-го индекса от 0 до Ln-1, для всех индексов от 1 до N (не путать мерность массива с индексацией, N определяет число координат и всегда больше 0).

В языке C при обращении к элементам массива не проверяется выход индекса за пределы как соответствующей координаты, так и всего массива целиком. Например, к элементу a[1][1] из примера 2 можно обратиться следующим способом: a[0][4]. В данном случае выход второй координаты за установленные пределы компилятором не проверяется, и никаких предупреждений выдано не будет. Тем не менее, следует избегать подобных обращений как возможного источника ошибок, возникающих в процессе выполнения программы. Например, при обращении к элементу a[1][4] будет произведено обращение по адресу, расположенному за границами массива, и результат подобного обращения непредсказуем.

Пример 3

int a[2][2];

for(int i=0;i<2;i++)

for(int j=0;j<2;j++)

{

a[i][j]=i*2+j;

printf("%d ",a[i][j]);

}

На экране будет напечатано: 0 1 2 3

Массивы символов. Строки.

Массив символов – это массив, элементы которого являются символами. Строка – это одномерный массив символов, заканчивающийся нулевым байтом. Каждый бит нулевого байта равен нулю, для него определена символьная константа ‘\0’. Если строка содержит L символов, то длина массива должна быть не меньше, чем L+1.

Пример 4

char s[10]="Hello";

Содержимое массива s в памяти:

H e l l o ‘\0’ un un un un

При инициализации массива символов строкой можно использовать вторую форму объявления массива.

Пример 5

char s[]="Hello";

В данном случае размер массива будет определяться компилятором автоматически и будет равен шести элементам массива. Содержимое массива s в памяти:

H e l l o ‘\0’

Для работы со строками в среде Borland C++ 3.1 имеется специальная библиотека функций, описанная в заголовочном файле string.h. Описание этих функций можно посмотреть во встроенной справочной системе.

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

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

Пример 6

Инициализация одномерных массивов

int a[4]={1,2,3,4},b[4]={5,6};

расположение массива a[4] в памяти

расположение массива b[4] в памяти

un un

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

Пример 7

Инициализация двумерных массивов

int a[3][5]={1,2,3,4,5,6,7,8,9,10,11};

int b[3][5]={{1,2,3},{4,5,6,7,8},{9,10,11}};

расположение массива a[3][5] в памяти

un un un un

расположение массива b[3][5] в памяти

un un
un un

Символьный массив может быть инициализирован как обычный массив.

Пример 8

char s[6]={‘H’,’e’,’l’,’l’,’o’};

В данном случае нулевой байт добавлен не будет. Содержимое массива s в памяти:

H e l l o un

Автоматически инициализируются только массивы, объявленные на внешнем уровне (вне функций) или на внутреннем с классом памяти static – их элементы зануляются, если не производится явная инициализация.

Явная инициализация недопустима для массивов внешнего уровня с классом памяти extern.

Просмотров: 812


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.