Первичные выражения

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

15.1. Первичные выражения

Первичные выражения, включающие ., ->, индексацию и об-

ращения к функциям, группируются слева направо.

Первичное выражение:

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

константа

строка

(выражение)

первичное-выражение [выражение]

первичное-выражение (список-выражений нео

первичное-L-значение . Идентификатор

первичное-выражение -> идентификатор

список-выражений:

выражение

список-выражений, выражение

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

он описан подходящим образом, как это обсуждается ниже. тип

идентификатора определяется его описанием. Если, однако, ти-

пом идентификатора является “массив ...”, то значением выра-

жения, состоящего из этого идентификатора , является указа-

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

дет “указатель на ...”. Более того, идентификатор массива не

является выражением L-значения. подобным образом идентифика-

тор, который описан как “функция, возвращающая ...”, за иск-

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

функции при обращении, преобразуется в “указатель на функ-

цию, которая возвращает ...”.

Константа является первичным выражением. В зависимости

от ее формы типом константы может быть INT, LONG или DOUBLE.

Строка является первичным выражением. Исходным ее типом

является “массив символов”; но следуя тем же самым правилам,

которые приведены выше для идентификаторов, он модифицирует-

ся в “указатель на символы”, и результатом является указа-

тель на первый символ строки. (имеется исключение в некото-

рых инициализаторах; см. П. 16.6.)

Выражение в круглых скобках является первичным выражени-

ем, тип и значение которого идентичны типу и значению этого

выражения без скобок. Наличие круглых скобок не влияет на

то, является ли выражение L-значением или нет.


·     193 -

Первичное выражение, за которым следует выражение в

квадратных скобках, является первичным выражением. Интуитив-

но ясно, что это выражение с индексом. Обычно первичное вы-

ражение имеет тип “указатель на ...”, индексное выражение

имеет тип INT, а типом результата является “...”. Выражение

E1[E2] по определению идентично выражению * ((E1) + (E2)).

Все, что необходимо для понимания этой записи, содержится в

этом разделе; вопросы, связанные с понятием идентификаторов

и операций * и + рассматриваются в п.п. 15.1, 15.2 И 15.4

соответственно; выводы суммируются ниже в п. 22.3.

Обращение к функции является первичным выражением, за

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

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

ляют собой фактические аргументы функции. Первичное выраже-

ние должно быть типа “функция, возвращающая ...”, а резуль-

тат обращения к функции имеет тип “...”. Как указывается ни-

же, ранее не встречавщийся идентификатор, за которым непос-

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

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

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

возвращающей целое значение, не нуждается в описании.

Перед обращением любые фактические аргументы типа FLOAT

преобразуются к типу DOUBLE, любые аргументы типа CHAR или

SHORT преобразуются к типу INT, и, как обычно, имена масси-

вов преобразуются в указатели. Никакие другие преобразования

не выполняются автоматически; в частности, не сравнивает ти-

пы фактических аргументов с типами формальных аргументов.

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

типа (CAST); см. П.п. 15.2, 16.7.

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

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

тов в языке “C” осуществляются строго по значению. функция

может изменять значения своих формальных параметров, но эти

изменения не влияют на значения фактических параметров. С

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

таком условии, что функция может изменять значение объекта,

на который этот указатель указывает. Порядок вычисления ар-

гументов в языке не определен; обратите внимание на то, что

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

Допускаются рекурсивные обращения к любой функции.

Первичное выражение, за которым следует точка и иденти-

фикатор, является выражением. Первое выражение должно быть

L-значением, именующим структуру или объединение, а иденти-

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

Результатом является L-значение, ссылающееся на поименован-

ный член структуры или объединения.

Первичное выражение, за которым следует стрелка (состав-

ленная из знаков - и >) и идентификатор, является выражени-

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

объединение, а идентификатор должен именовать член этой

структуры или объединения. Результатом является L-значение,

ссылающееся на поименованный член структуры или объединения,

на который указывает указательное выражение.

Следовательно, выражение E1->MOS является тем же самым,

что и выражение (*E1).MOS. Структуры и объединения рассмат-

риваются в п. 16.5. Приведенные здесь правила использования

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

бы иметь возможность обойти механизм типов. См. П. 22.1.


·     194 -


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

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

Скачать
48443
0
0

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

Скачать
43709
0
0

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

Скачать
39778
0
1

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

Скачать
64931
0
0

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

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


Наверх