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

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

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 оперирует с двумя категориями...


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


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Методика обучения письму и письменной речи на иностранном языке в средней школе. Различают письмо и письменную речь. Письмо – объект овладения графической и орфографической системами иностранного языка для фиксации языкового и речевого материала...

Классификация холодных блюд и закусок. Урок №2 Тема: Холодные блюда и закуски. Значение холодных блюд и закусок. Классификация холодных блюд и закусок. Кулинарная обработка продуктов...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

Билет №7 (1 вопрос) Язык как средство общения и форма существования национальной культуры. Русский литературный язык как нормированная и обработанная форма общенародного языка Важнейшая функция языка - коммуникативная функция, т.е. функция общения Язык представлен в двух своих разновидностях...

Патристика и схоластика как этап в средневековой философии Основной задачей теологии является толкование Священного писания, доказательство существования Бога и формулировка догматов Церкви...

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

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