Язык программирования C

Скачать в pdf «Язык программирования C»


Массив можно составлять из объектов арифметического типа, указателей, структур и объединений, а также других массивов (создавая таким образом многомерные массивы). Любой тип, из которого создается массив, должен быть полным; он не может быть структурой или массивом неполного типа. Это значит, что для многомерного массива пропустить можно только первую размерность. Неполный тип массива становится полным либо в другом, полном, объявлении этого массива (раздел А. 10.2), либо при его инициализации (раздел А.8.7). Например, следующая запись объявляет массив чисел типа float и массив указателей на числа типа float: float fa [17], *afр [17];


Аналогично, следующее объявление создает статический трехмерный массив целых чисел размером 3x5x7: static int x3d[3][5][7];


Точнее говоря, x3d является массивом из трех элементов, каждый из которых есть массив из пяти элементов, содержащих по 7 значений типа int. Любое из выражений, x3d, x3d[i], x3d[i] [j], x3d[i] [j] [k], может фигурировать в другом выражении — лишь бы контекст был правильный. Первые три выражения имеют тип “массив”, а последнее — тип int. Если конкретнее, x3d [i] [ j ] — это массив из 7 целых чисел, а x3d [i] — массив из пяти массивов, по 7 целых чисел в каждом.


Операция индексирования массива определена так, что выражение Е1[Е2] идентично * (Е1+Е2). Следовательно, несмотря на асимметричность записи, индексирование— коммутативная операция. Учитывая правила преобразования для операции + и массивов (разделы А.6.6, А.7.1, А.7.7), можно утверждать, что если Е1— массив, а Е2 — целочисленная величина, то El [Е2] обозначает Е2-й элемент массива Е1.


Так, в нашем примере x3d[i] [j] [к] означает то же самое, что и * (x3d [i] [ j ] +k). Первое подвыражение, x3d [i] [ j ], согласно разделу А.7.1, приводится к типу “указатель на массив целых чисел”; согласно разделу АЛЛ, сложение включает умножение на размер объекта типа int. Из этих же правил следует, что массивы запоминаются построчно (последние индексы пробегаются быстрее) и что первый индекс в объявлении помогает определить количество памяти, занимаемой массивом, но не играет никакой другой роли в вычислении адреса элемента массива.

Скачать в pdf «Язык программирования C»