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

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

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




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


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


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


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

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

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

Тема: Составление цепи питания Цель: расширить знания о биотических факторах среды. Оборудование:гербарные растения...

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

Типовые примеры и методы их решения. Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно. Какова должна быть годовая номинальная процентная ставка...

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