Спецификаторы типа

Язык С
Строк программы, исключая математическое обеспечение Является учебным введением в центральную часть языка “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.2. Спецификаторы типа

Ниже перечисляются спецификаторы типа.

Спецификатор-типа:

CHAR

SHORT

INT

LONG

UNSIGNED

FLOAT

DOUBLE

спецификатор-структуры-или-объединения

определяющее-тип-имя

 

Слова LONG, SHORT и USIGNED можно рассматривать как при-

лагательные; допустимы следующие комбинации:

SHORT INT

LONG INT

USIGNED INT

LONG FLOAT

 

Последняя комбинация означает то же, что и DOUBLE. В осталь-

ном описание может содержать не более одного спецификатора

типа. Если описание не содержит спецификатора типа, то счи-

тается, что он имеет значение INT.

Спецификаторы структур и объединений обсуждаются в п.

16.5; Описания с определяющими тип именами TYPEDEF обсужда-

ются в п. 16.8.


·     202 -

16.3. Описатели

Входящий в описание список описателей представляет собой

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

из которых может иметь инициализатор.

Список-описателей:

инициализируемый-описатель

инициализируемый-описатель, список-описателей

инициализируемый-описатель:

описатель-инициализатор

необ

Инициализаторы описываются в п. 16.6. Спецификаторы и описа-

ния указывают тип и класс памяти объектов, на которые ссыла-

ются описатели. Описатели имеют следующий синтаксис:

 

описатель:

идентификатор

( описатель )

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

необ]

Группирование такое же как и в выражениях.

16.4. Смысл описателей

Каждый описатель рассматривается как утверждение того,

что когда конструкция той же самой формы, что и описатель,

появляется в выражении, то она выдает объект указанного типа

и указанного класса памяти. Каждый описатель содержит ровно

один идентификатор; это именно тот идентификатор, который и

описывается.

Если в качестве описателя появляется просто идентифика-

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

ке описания.

Описатель в круглых скобках идентичен описателю без

круглых скобок, но круглые скобки могут изменять связи в

составных описателях. Примеры смотри ниже.

Представим себе описание

T DI

где T - спецификатор типа (подобный INT и т.д.), а DI - опи-

сатель. Предположим, что это описание приводит к тому, что

соответствующий идентификатор имеет тип “...T”, где “...”

пусто, если DI просто отдельный идентификатор (так что тип X

в “INT X” просто INT). Тогда , если DI имеет форму

 

*D

то содержащийся идентификатор будет иметь тип “... Указатель

на T”.


·     203 -

Если DI имеет форму

D()

то содержащийся идентификатор имеет тип “... Функция, возв-

ращающая T”.

Если DI имеет форму

D[константное-выражение]

или

D[ ]

то содержащийся идентификатор имеет тип “...массив T”. В

первом случае константным выражением является выражение,

значение которого можно определить во время компиляции и ко-

торое имеет тип INT. (Точное определение константного выра-

жения дано в п. 23). Когда несколько спецификаций вида “мас-

сив из” оказываются примыкающими, то создается многомерный

массив; константное выражение, задающее границы массивов,

может отсутствовать только у первого члена этой последова-

тельности. Такое опускание полезно, когда массив является

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

мять, приводится в другом месте. Первое константное выраже-

ние может быть опущено также тогда, когда за описателем сле-

дует инициализация. В этом случае размер определяется по

числу приведенных инициализируемых элементов.

Массив может быть образован из элементов одного из ос-

новных типов, из указателей, из структур или объединений или

из других массивов (чтобы образовать многомерный массив).

Не все возможности, которые разрешены с точки зрения

указанного выше синтаксиса, фактически допустимы. Имеются

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

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

щать указатели на такие вещи; не существует массивов функ-

ций, хотя могут быть массивы указателей на функции. Анало-

гично, структуры или объединения не могут содержать функцию,

но они могут содержать указатель на функцию.

В качестве примера рассмотрим описание

INT I, *IP, F(), *FIP(), (*PFI)();

в котором описывается целое I, указатель IP на целое, функ-

ция F, возвращающая целое, функция FIP, возвращающая указа-

тель на целое, и указатель PFI на функцию, которая возвраща-

ет целое. Особенно полезно сравнить два последних описателя.

Связь в *FIP() можно представить в виде *(FIP()), так что

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

нии требуется обращение к функции FIP и последующее исполь-

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

результата (указателя) целого. В описателе (*PFI)() дополни-


·     204 -

тельные скобки необходимы, поскольку они точно так же, как и

в выражении, указывают, что косвенная адресация через указа-

тель на функцию выдает функцию, которая затем вызывается;

эта вызванная функция возвращает целое.

В качестве другого примера приведем описание

FLOAT FA[17], *AFP[17];

в котором описывается массив чисел типа FLOAT и массив ука-

зателей на числа типа FLOAT. Наконец,

 

STATIC INT X3D[3][5][7];

описывает статический трехмерный массив целых размером

3*5*7. более подробно, X3D является массивом из трех элемен-

тов; каждый элемент является массивом пяти массивов; каждый

последний массив является массивом из семи целых. Каждое из

выражений X3D, X3D[I], X3D[I][J] и X3D[I][J][K] может разум-

ным образом появляться в выражениях. Первые три имеют тип

“массив”, последнее имеет тип INT.


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

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

Скачать
48443
0
0

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

Скачать
43709
0
0

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

Скачать
39778
0
1

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

Скачать
64931
0
0

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

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


Наверх