Рассмотрим множество операций языка Си. Описанные операции входят в это множество. Язык Си отличается их большим разнообразием. В этом разделе будет обсуждаться их семантика. Каждая операция характеризуется уровнем приоритета и порядком, в котором эти операции выполняются - слева направо или справа налево. Если все операции выражения имеют один и тот же уровень приоритета, то значение выражения вычисляется слева направо в соответствии с порядком выполнения операций. Все операции с одним и тем же уровнем приоритета имеют один и тот же порядок. Однако, если в выражении имеются операции с различными уровнями приоритета, то сначала выполняются операции с наивысшим уровнем приоритета, затем - следующего за ним приоритета и так далее в порядке убывания приоритета. Операции одного уровня приоритета выполняются в последовательности, указанной их порядком.
Операции, уровень приоритета которых равен 1
Операции вызова функции, индексирования и выбора. В качестве операций языка Си рассматриваются также скобки в вызове функции, квадратные скобки для индексирования массивов, точка и стрелка вправо для выбора компонентов структуры или объединения. Уровень этих операторов равен 1, все операции выполняются слева направо.
Операция вызова функции: ()
Пример 1:
fe(e1, e2,...,en);Вызов функции fe с аргументами e1, e2,..., en. Значением этого выражения является значение, которое возвращает функция.
Пример 2:
x = sqrt (y);Операция индексирования массива: []
Синтаксис:
array [2]Значением выражения является третий элемент массива.
Присвоение значения 26 одиннадцатому элементу массива записывается таким образом:
array[10]=26;Первый элемент массива описывается выражением array[0] (более подробно о массивах описано в лекции 12).
Операция выбора компонентов структуры или объединения:.
Синтаксис:
struct.elementЗначением этого выражения является элемент element структуры struct или объединения (см. лекцию 14). Оператор:
struct.element=1963;присваивает значение 1963 этому элементу.
Операция выбора компонентов структуры с указателем: ->
Синтаксис:
my_birthday->day,my_birthday - указатель на структуру. Оператор:
my_birthday->day=26;присваивает значение 26 структурной переменной day, на которую указывает my_birthday.