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

Язык С
Строк программы, исключая математическое обеспечение Является учебным введением в центральную часть языка “C” Hачинаем. Единственный способ освоить новый язык Оператор FOR Набор полезных программ Подсчет символов Подсчет слов Функции Аргументы - вызов по значению Область действия: внешние переменные Резюме Константы Описания Преобразование типов До 9 и буквы от а до F Операции и выражения присваивания Старшинство и порядок вычисления Операторы и блоки Переключатель Цикл DO - WHILE Оператор CONTINUE Основные сведения Функции, возвращающие нецелые значения Еще об аргументах функций Правила, определяющие область действия Статические переменные Блочная структура Рекурсия Указатели и адреса Указатели и массивы Адресная арифметика Указатели символов и функции Указатели - не целые До 12, а не от 0 до 11. Так как за экономию памяти у нас пока не награждают, такой способ проще, чем подгонка индек-сов Инициализация массивов указателей Указатели на функции Структуры Структуры и функции Указатели на структуры Мы продемонстрируем, как правильно выполнить эту задачу Поля Определение типа Обращение к стандартной библиотеке Форматный вывод - функция PRINTF Форматный ввод - функция SCANF Форматное преобразование в памяти Обработка ошибок - STDERR и EXIT Обращение к системе Низкоуровневый ввод/вывод - операторы READ и WRITE Произвольный доступ - SEEK и LSEEK Пример - распечатка справочников Пример - распределитель памяти Константы Синтаксическая нотация Преобразования Первичные выражения Унарные операции Аддитивные операции Операция присваивания Спецификаторы типа Описание структур и объединений Инициализация TYPEDEF Оператор SWITCH Внешнее определение функции Область действия внешних идентификаторов Неявные описания Явные преобразования указателей Анахронизмы Операторы
439386
знаков
0
таблиц
0
изображений

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

Описатель может указывать начальное значение описываемо-

го идентификатора. Инициализатор состоит из выражения или

заключенного в фигурные скобки списка значений, перед кото-

рыми ставится знак =.

 

Инициализатор:

= выражение

= \(список-инициализатора\)

= \(список-инициализатора,\)

список-инициализатора:

выражение

список-инициализатора,список-инициализатора

\(список-инициализатора\)

 

Все выражения, входящие в инициализатор статической или

внешней переменной, должны быть либо константными выражения-

ми, описываемыми в п. 23, Либо выражениями, которые сводятся

к адресу ранее описанной переменной, возможно смещенному на

константное выражение. Автоматические и регистровые перемен-

ные могут быть инициализированы произвольными выражениями,

включающими константы и ранее описанные переменные и функ-

ции.

Гарантируется, что неинициализированные статические и

внешние переменные получают в качестве начальных значений

0;неинициализированные автоматические и регистровые перемен-

ные в качестве начальных значений содержат мусор.

Когда инициализатор применяется к скаляру (указателю или

объекту арифметического типа), то он состоит из одного выра-

жения, возможно заключенного в фигурные скобки. Начальное

значение объекта находится из выражения; выполняются те же

самые преобразования, что и при присваивании.

Когда описываемая переменная является агрегатом (струк-

турой или массивом ), то инициализатор состоит из заключен-

ного в фигурные скобки и разделенного запятыми списка иници-

ализаторов для членов агрегата. Этот список составляется в

порядке возрастания индекса или в соответствии с порядком

членов. Если агрегат содержит подагрегаты, то это правило

применяется рекурсивно к членам агрегата. Если количество

инициализаторов в списке оказывается меньше числа членов аг-

регата, то оставшиеся члены агрегата заполняются нулями.

Запрещается инициализировать объединения или автоматические

агрегаты.

Фигурные скобки могут быть опущены следующим образом.

Если инициализатор начинается с левой фигурной скобки, то

последующий разделенный запятыми список инициализаторов ини-

циализирует члены агрегата; будет ошибкой, если в списке

окажется больше инициализаторов, чем членов агрегата. Если

однако инициализатор не начинается с левой фигурной скобки,

то из списка берется только нужное для членов данного агре-

гата число элементов; оставшиеся элементы используются для

инициализации следующего члена агрегата, частью которого яв-

ляется настоящий агрегат.


·     208 -

Последнее сокращение допускает возможность инициализации

массива типа 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”;

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

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

16.7. Имена типов

В двух случаях (для явного указания типа преобразования

в конструкции перевода и для аргументов операции SIZEOF) же-

лательно иметь возможность задавать имя типа данных. Это

осуществляется с помощью “имени типа”, которое по существу

является описанием объекта такого типа , в котором опущено

имя самого объекта.


·     209 -

Имя типа:

спецификатор-типа абстрактный-описатель

абстрактный-описатель:

пусто

(абстрактный-описатель)

·     абстрактный описатель абстрактный-описатель () абстрактный-описатель [константное выражение

необ]

Во избежании двусмысленности в конструкции

(абстрактный описатель)

требуется, чтобы абстрактный-описатель был непуст. При этом

ограничении возможно однозначено определить то место в абст-

рактном-описателе, где бы появился идентификатор, если бы

эта конструкция была описателем в описании. Именованный тип

совпадает тогда с типом гипотетического идентификатора. Нап-

ример, имена типов

 

INT

INT *

INT *[3]

INT (*)[3]

INT *()

INT (*)()

именуют соответственно типы “целый”, “указатель на целое”,

“массив из трех указателей на целое”, “указатель на массив

из трех целых”, “ функция, возвращающая указатель на целое”

и “указатель на функцию, возвращающую целое”.


Информация о работе «Язык С»
Раздел: Информатика, программирование
Количество знаков с пробелами: 439386
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
48443
0
0

... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...

Скачать
43709
0
0

... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...

Скачать
39778
0
1

... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...

Скачать
64931
0
0

... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...

0 комментариев


Наверх