Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PYaVU_s.doc
Скачиваний:
44
Добавлен:
24.02.2016
Размер:
665.09 Кб
Скачать
      1. Выражение выбора структурного элемента

Синтаксис:

<expression>.<identifier>

<expression> -> <identifier>

Выражение выбора структурного элемента ссылается на элементы структур, совмещений или классов. Выражение выбора имеет значение и тип выбранного элемента.

В первой синтаксической форме <expression>.<identifier> выражение <expression> представляет величину типа struct или union, а идентификатор именует элемент, специфицированной структуры или совмещения. Во второй синтаксической форме <expression> -> <identifier> выражение <expression> представляет указатель на структуру или совмещение, а идентификатор именует элемент специфицированной структуры.

Обе синтаксические формы выражений выбора элемента дают одинаковый результат. Действительно, запись, включающая операцию адресного выбора ->, является сокращенной версией записи с точкой, для случая, когда выражению, стоящему перед точкой, предшествует операция разадресации "*". Операция разадресации рассматривается в разделе 5.3.3.

Поэтому запись <expression> -> <identifier> эквивалентна записи (* <expression>). <identifier>, когда значение <expression> является адресной величиной.

Примеры:

struct pair {

int a;

int b;

struct pair *sp;

} item, list[10];

item.sp = &item /* Example 1 */

(item.sp) -> a = 24 /* Example 2 */

list[8].b = 12 /* Example 3 */

В первом примере адрес структуры item присваивается элементу sp этой структуры. Это имеет смысл того, что item содержит указатель на саму себя.

Во втором примере используется адресное выражение item.sp с операцией выбора -> , чтобы присвоить значение элементу a.

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

      1. Выражения с операциями

Выражения с операциями могут быть унарными, бинарными или тернарными. Унарное выражение состоит из операнда с предшествующей унарной операцией- <unop> или операнда, заключенного в круглые скобки, с предшествующим ему ключевым словом sizeof.

Синтаксис:

<unop><operand>

sizeof<operand>

Бинарное выражение состоит из двух операндов, разделенных бинарной операцией- <binop>.

Синтаксис:

<operand><binop><operand>

Тернарное выражение состоит из трех операндов, разделенных тернарной операцией "?:"

Синтаксис:

<operand> ? <operand> : <operand>

Выражения присваивания используют унарные, бинарные и соcтавные операции присваивания. Унарными операциями присваивания являются инкремент "++" и декремент "--". Бинарная операция присваивания всего одна "=". Составные операции присваивания будем обозначать как <compound-assign-ops>. Каждая составная операция присваивания- это комбинация бинарной операции с простой операцией присваивания.

Синтаксис выражений присваивания:

<operand> ++

<operand> --

++<operand>

--<operand>

<operand> = <operand>

<operand> <compound-assignment-ops> <operand>

      1. Выражения в скобках

Любой операнд может быть заключен в скобки. Они не влияют на тип и значение выражения, заключенного в скобки. Например, в выражении

(10 + 5) / 5

скобки, заключающие запись 10 + 5, означают, что величина 10 + 5 является левым операндом операции деления. Результат выражения (10 + 5) / 5 равен 3. Без скобок значение записи 10 + 5 / 5 равнялось бы 11. Хотя скобки влияют на то, каким путем группируются операнды в выражении, они не гарантируют детальный порядок вычисления выражения.