Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

R.8.2.4 Массивы





В описании T D, в котором D имеет вид D1 [ выражение-константа opt ] описывается идентификатор типа "... массив T". Есливыражение-константа присутствует ($$R.5.19), то оно должно иметьцелочисленный тип и значение, большее 0. Это выражение задает числоэлементов массива. Если значение выражения-константы есть N, томассив имеет N элементов с индексами от 0 до N-1. Массив можно образовывать из: одного из основных типов (за исключениемvoid), указателя, указателя на члены, класса, перечисления или издругого массива. Если подряд идут несколько спецификаций "массив...", образуетсямногомерный массив, причем выражение-константа, задающее границымассива, может отсутствовать только для первого массива. Такое умолчаниеполезно в случае параметров функции типа массив, а также когда массивявляется внешним, а его определение, с которым связано резервированиепамяти, находится в другом месте. Первое выражение-константа можетбыть пропущено и в том случае, если за описателем следуетсписок-инициализаторов ($$R.8.4). Тогда размер массива определяетсячислом элементов, приведенных в инициализаторе ($$R.8.4.1). В описании float fa[17], *afp[17]; описаны массив чисел типа float и массив указателей на числа типа float,а в описании static int x3d[3][5][7]; описан статический трехмерный массив целых размера 3x5x7. Строгоговоря, x3d является массивом из трех элементов, каждый из которыхесть массив из пяти массивов, а каждый из последних является массивомиз семи целых. В выражении допустимо появление любого из следующихвыражений: x3d, x3d[i], x3d[i][j], x3d[i][j][k]. Если в выражении участвует идентификатор типа массив, то, исключаяслучаи операнда в операциях sizeof или & и инициализатора дляссылки ($$R.8.4.3), его тип преобразуется в указатель на первыйэлемент массива. Несмотря на это преобразование, массивы не являютсяизменяемыми адресами. Если не считать случай использования массивапри описании класса ($$R.13.4.5), операция индексации определяетсятак, что E1[E2] совпадает с *((E1) + (E2)). С учетом правилпреобразования типов для операции +, если E1 есть массив, а E2целое, то E1[E2] указывает на E2-элемент из E1. Поэтому, несмотряна свой асиметричный вид, индексация - коммутативная операция. Аналогичное правило действует и для многомерных массивов. ЕслиE - n-мерный массив размера ixjx...xk, то в выражении онпреобразуется в указатель на (n-1)-мерный массив размера jx...xk.Если к этому указателю явно или неявно в результате индексации применяетсяоперация *, указуемый (n-1)-мерный массив сам немедленно преобразуетсяв указатель. Например, рассмотрим описание int x[3][5]; Здесь описан массив из 3x5 целых. Если в выражении появляется x, тооно преобразуется в указатель на первый массив из пяти целых.Если в выражении появляется x[i], что эквивалентно *(x+i), в началеx преобразуется в указатель, как было сказано выше, затем x+iпреобразуется к типу x, для чего необходимо i умножить на размер объекта,на который указывает x, т.е. на размер пяти целых. Затем происходитсложение и применяется косвенность, после чего получим массив (из пятицелых), который в свою очередь преобразуется в указатель на первое изцелых. Если есть еще одна индексация, процесс повторяется, и на этот размы получим в результате целое. Из всего этого следует, что массивы В С++ хранятся по строкам(последний индекс изменяется быстрее всего), а значение первогоиндекса из описания позволяет вычислить размер памяти, необходимойдля массива, однако при вычислении индексного выражения первый индексроли не играет.







Дата добавления: 2015-09-04; просмотров: 327. Нарушение авторских прав; Мы поможем в написании вашей работы!




Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


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


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


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

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

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

Образование соседних чисел Фрагмент: Программная задача: показать образование числа 4 и числа 3 друг из друга...

Растягивание костей и хрящей. Данные способы применимы в случае закрытых зон роста. Врачи-хирурги выяснили...

ФАКТОРЫ, ВЛИЯЮЩИЕ НА ИЗНОС ДЕТАЛЕЙ, И МЕТОДЫ СНИЖЕНИИ СКОРОСТИ ИЗНАШИВАНИЯ Кроме названных причин разрушений и износов, знание которых можно использовать в системе технического обслуживания и ремонта машин для повышения их долговечности, немаловажное значение имеют знания о причинах разрушения деталей в результате старения...

Различие эмпиризма и рационализма Родоначальником эмпиризма стал английский философ Ф. Бэкон. Основной тезис эмпиризма гласит: в разуме нет ничего такого...

Studopedia.info - Студопедия - 2014-2026 год . (0.012 сек.) русская версия | украинская версия