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


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





 

 

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

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

 

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

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

константа

строка

(выражение)

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

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

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

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

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

выражение

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

имеет тип 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.

 

 







Date: 2015-09-17; view: 370; Нарушение авторских прав



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