Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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";

 

демонстрирует инициализацию элементов символьного массива с

помощью строки.

 

Date: 2015-09-17; view: 346; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию