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



         

Инициализация


Описатель может указывать начальное значение описываемого идентификатора. Инициализатор состоит из выражения или заключенного в фигурные скобки списка значений, перед которыми ставится знак =.

Инициализатор: = выражение = {список-инициализатора} = {список-инициализатора,} список-инициализатора: выражение список-инициализатора,список-инициализатора {список-инициализатора}

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

Гарантируется, что неинициализированные статические и внешние переменные получают в качестве начальных значений 0; неинициализированные автоматические и регистровые переменные в качестве начальных значений содержат мусор.

Когда инициализатор применяется к скаляру (указателю или объекту арифметического типа), то он состоит из одного выражения, возможно заключенного в фигурные скобки. Начальное значение объекта находится из выражения; выполняются те же самые преобразования, что и при присваивании.

Когда описываемая переменная является агрегатом (структурой или массивом), то инициализатор состоит из заключенного в фигурные скобки и разделенного запятыми списка инициализаторов для членов агрегата. Этот список составляется в порядке возрастания индекса или в соответствии с порядком членов. Если агрегат содержит подагрегаты, то это правило применяется рекурсивно к членам агрегата. Если количество инициализаторов в списке оказывается меньше числа членов агрегата, то оставшиеся члены агрегата заполняются нулями. Запрещается инициализировать объединения или автоматические агрегаты.

фигурные скобки могут быть опущены следующим образом. Если инициализатор начинается с левой фигурной скобки, то последующий разделенный запятыми список инициализаторов инициализирует члены агрегата; будет ошибкой, если в списке окажется больше инициализаторов, чем членов агрегата. Если однако инициализатор не начинается с левой фигурной скобки, то из списка берется только нужное для членов данного агрегата число элементов; оставшиеся элементы используются для инициализации следующего члена агрегата, частью которого является настоящий агрегат.

Последнее сокращение допускает возможность инициализации массива типа char с помощью строки. В этом случае члены массива последовательно инициализируются символами строки.

Например,




Содержание  Назад  Вперед