Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Инициализация. Описатель может указывать начальное значение описываемо-
Описатель может указывать начальное значение описываемо- го идентификатора. Инициализатор состоит из выражения или заключенного в фигурные скобки списка значений, перед кото- рыми ставится знак =.
Инициализатор: = выражение = \(список-инициализатора\) = \(список-инициализатора,\) список-инициализатора: выражение список-инициализатора,список-инициализатора \(список-инициализатора\)
Все выражения, входящие в инициализатор статической или внешней переменной, должны быть либо константными выражения- ми, описываемыми в п. 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";
демонстрирует инициализацию элементов символьного массива с помощью строки.
|