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

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

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. Нарушение авторских прав; Мы поможем в написании вашей работы!




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


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Выработка навыка зеркального письма (динамический стереотип) Цель работы: Проследить особенности образования любого навыка (динамического стереотипа) на примере выработки навыка зеркального письма...

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

Правила наложения мягкой бинтовой повязки 1. Во время наложения повязки больному (раненому) следует придать удобное положение: он должен удобно сидеть или лежать...

Весы настольные циферблатные Весы настольные циферблатные РН-10Ц13 (рис.3.1) выпускаются с наибольшими пределами взвешивания 2...

Хронометражно-табличная методика определения суточного расхода энергии студента Цель: познакомиться с хронометражно-табличным методом опреде­ления суточного расхода энергии...

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

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