Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Описание структур и объединенийСодержание книги
Поиск на нашем сайте Инициализация Описатель может указывать начальное значение описываемо-го идентификатора. Инициализатор состоит из выражения илизаключенного в фигурные скобки списка значений, перед кото-рыми ставится знак =. Инициализатор: = выражение = \(список-инициализатора\) = \(список-инициализатора,\) список-инициализатора: выражение список-инициализатора,список-инициализатора \(список-инициализатора\) Все выражения, входящие в инициализатор статической иливнешней переменной, должны быть либо константными выражения-ми, описываемыми в п. 23, Либо выражениями, которые сводятсяк адресу ранее описанной переменной, возможно смещенному наконстантное выражение. Автоматические и регистровые перемен-ные могут быть инициализированы произвольными выражениями,включающими константы и ранее описанные переменные и функ-ции. Гарантируется, что неинициализированные статические ивнешние переменные получают в качестве начальных значений0;неинициализированные автоматические и регистровые перемен-ные в качестве начальных значений содержат мусор. Когда инициализатор применяется к скаляру (указателю илиобъекту арифметического типа), то он состоит из одного выра-жения, возможно заключенного в фигурные скобки. Начальноезначение объекта находится из выражения; выполняются те жесамые преобразования, что и при присваивании. Когда описываемая переменная является агрегатом (струк-турой или массивом), то инициализатор состоит из заключен-ного в фигурные скобки и разделенного запятыми списка иници-ализаторов для членов агрегата. Этот список составляется впорядке возрастания индекса или в соответствии с порядкомчленов. Если агрегат содержит подагрегаты, то это правилоприменяется рекурсивно к членам агрегата. Если количествоинициализаторов в списке оказывается меньше числа членов аг-регата, то оставшиеся члены агрегата заполняются нулями.Запрещается инициализировать объединения или автоматическиеагрегаты. Фигурные скобки могут быть опущены следующим образом.Если инициализатор начинается с левой фигурной скобки, топоследующий разделенный запятыми список инициализаторов ини-циализирует члены агрегата; будет ошибкой, если в спискеокажется больше инициализаторов, чем членов агрегата. Еслиоднако инициализатор не начинается с левой фигурной скобки,то из списка берется только нужное для членов данного агре-гата число элементов; оставшиеся элементы используются дляинициализации следующего члена агрегата, частью которого яв-ляется настоящий агрегат. Последнее сокращение допускает возможность инициализациимассива типа CHAR с помощью строки. В этом случае члены мас-сива последовательно инициализируются символами строки. Например, INT X[] = \(1,3,5\); описывает и инициализирует X как одномерный массив; посколь-ку размер массива не специфицирован, а список инициализиторасодержит три элемента, считается, что массив состоит из трехчленов. Вот пример инициализации с полным использованием фигур-ных скобок: FLOAT *Y[4][3] = \((1, 3, 5), (2, 4, 6), (3, 5, 7), \); Здесь 1, 3 и 5 инициализируют первую строку массива Y[0], аименно Y[0][0], Y[0][1] и Y[0][2]. Аналогичным образом сле-дующие две строчки инициализируют Y[1] и Y[2]. Инициализаторзаканчивается преждевременно, и, следовательно массив Y[3]инициализируется нулями. В точности такого же эффекта можнобыло бы достичь, написав FLOAT Y[4][3] = \(1, 3, 5, 2, 4, 6, 3, 5, 7 \); Инициализатор для Y начинается с левой фигурной скобки, ноинициализатора для Y[0] нет. Поэтому используется 3 элементаиз списка. Аналогично следующие три элемента используютсяпоследовательно для Y[1] и Y[2]. следующее описание FLOAT Y[4][3] = \((1), (2), (3), (4) \); инициализирует первый столбец Y (если его рассматривать какдвумерный массив), а остальные элементы заполняются нулями. И наконец, описание CHAR MSG[] = "SYNTAX ERROR ON LINE %S\N"; демонстрирует инициализацию элементов символьного массива спомощью строки.Имена типов В двух случаях (для явного указания типа преобразованияв конструкции перевода и для аргументов операции SIZEOF) же-лательно иметь возможность задавать имя типа данных. Этоосуществляется с помощью "имени типа", которое по существуявляется описанием объекта такого типа, в котором опущеноимя самого объекта. Имя типа: спецификатор-типа абстрактный-описатель абстрактный-описатель: пусто (абстрактный-описатель) * абстрактный описатель абстрактный-описатель () абстрактный-описатель [константное выражение необ] Во избежании двусмысленности в конструкции (абстрактный описатель) требуется, чтобы абстрактный-описатель был непуст. При этомограничении возможно однозначено определить то место в абст-рактном-описателе, где бы появился идентификатор, если быэта конструкция была описателем в описании. Именованный типсовпадает тогда с типом гипотетического идентификатора. Нап-ример, имена типов INT INT * INT *[3] INT (*)[3] INT *() INT (*)() именуют соответственно типы "целый", "указатель на целое","массив из трех указателей на целое", "указатель на массивиз трех целых", " функция, возвращающая указатель на целое"и "указатель на функцию, возвращающую целое".TYPEDEF Описания, в которых "класс памяти"специфицирован какTYPEDEF, не вызывают выделения памяти. вместо этого они оп-ределяют идентификаторы,которые позднее можно использоватьтак, словно они являются ключевыми словами, имеющими основ-ные или производные типы. Определяющее-тип-имя идентификатор В пределах области действия описания со спецификаторомTYPEDEF каждый идентификатор, являющийся частью любого опи-сателя в этом описании, становится синтаксически эквивалент-ным ключевому слову, имеющему тот тип, который ассоциируетс идентификатором в описанном в п. 16.4 Смысле. Например,после описаний TYPEDEF INT MILES, >KLICKSP; TYPEDEF STRUCT (DOUBLE RE, IM;) COMPLEX; конструкции MILES DISTANCE; EXTERN KLICKSP METRICP; COMPLEX Z, *ZP; становятся законными описаниями; при этом типом DISTANCE яв-ляется INT, типом METRICP - "указатель на INT", типом Z -специфицированная структура и типом ZP - указатель на такуюструктуру. Спецификатор TYPEDEF не вводит каких-либо совершенно но-вых типов, а только определяет синонимы для типов, которыеможно было бы специфицировать и другим способом. Так в при-веденном выше примере переменная DISTANCE считается имеющейточно такой же тип, что и любой другой объект, описанный вINT.Операторы За исключением особо оговариваемых случаев, операторывыполняются последовательно.Операторное выражение Большинство операторов являются операторными выражения-ми, которые имеют форму выражение; обычно операторные выражения являются присваиваниями или об-ращениями к функциям.
|
||
|
Последнее изменение этой страницы: 2016-08-26; просмотров: 396; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.011 с.) |