Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Массивы. Синтаксис объявления и доступ к элементам массива

Размерность массива должна быть больше или равна 1.

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

int i = 123;

a[2] = i;

i = a[7];

Значение размерности должно быть константным выражением, т.е. она должна быть известна на этапе трансляции. Это означает, что переменная не может использоваться (как в Паскале) для задания размерности массива.

Массивы представляют собой производные типы (указатели также относятся к производным типам).

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

Приведем примеры объявления и определения массивов.

extern int intArray_1[];

Объявлен (именно объявлен - об этом говорит спецификатор extern) массив типа int, имя массива - intArray_1, разделители [] указывают на то, что перед нами объявление массива.

int intArray_2[10];

А это уже определение массива. Все тот же тип int, имя массива - intArray, между разделителями [ и ] находится константное выражение, значение которого определяет размерность массива.

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

int intArray_3[] = {1,2,3}; // Это также определение массива.

Количество элементов массива становится известным транслятору при анализе инициализатора. Элементам массива присваиваются соответствующие значения из списка инициализаторов.

Еще одна форма определения массива:

int intArray_4[3] = {1,2,3};

В этом определении массива важно, чтобы количество элементов в инициализаторе массива не превышало значение константного выражения в описателе массива.

В результате выполнения этого оператора в памяти выделяется область, достаточная для размещения трех объектов-представителей типа int. Участку присваивается имя intArray_4. Элементы инициализируются значениями, входящими в состав инициализатора.

Возможна частичная инициализация массива. При этом значения получают первые элементы массива:

int intArray_5[3] = {1,2};

В этом определении массива означены лишь первые два элемента массива. Значение последнего элемента массива в общем случае не определено (или 0).

Здесь нужно отметить одну интересную особенность синтаксиса инициализатора массива. Речь идет о необязательной запятой в конце списка инициализаторов, ее назначение заключается в том, чтобы указывать на факт частичной инициализации массива.

Действительно, последний вариант (частично) инициализирующего оператора определения массива выглядит нагляднее:

int intArray_5[3] = {1,2,};

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

int intArray_6[3] = {1,2,3};int intArray_6[3] = {1,2,3,};// Полная инициализация с запятойint intArray_6[] = {1,2,3};int intArray_6[] = {1,2,3,};

Между этими операторами не существует никакой разницы.

А вот в таком контексте

int intArray_6[3] = {1,2,}; // Частичная инициализация массива из трех элементов

Последняя запятая в фигурных скобках - не более как полезное украшение. Что-то недосказанное таится в таком операторе присвоения.

int intArray_7[];

А вот это некорректное объявление. Без спецификатора extern транслятор воспринимает это как ошибку. В скором времени мы обсудим причину этого явления.

Рассмотрим процессы, происходящие при выполнении оператора определения массива. Они во многом аналогичны процессам, происходящим при определении константного указателя:

· по константному выражению в описателе или на основе информации в инициализаторе определяется размер необходимой области памяти. Здесь сразу уже необходима полная информация о размерности массива. Размер области памяти равняется произведению размера элемента массива на размерность массива,

· выделяется память,

· адрес выделенной области памяти присваивается объекту, который по своим характеристикам близок константному указателю (хотя это объект совершенно особого типа).

<== предыдущая лекция | следующая лекция ==>
Массив в С++- это последовательность элементов одного и того же типа | Массивы и параметры
Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 567; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.032 сек.