Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подбельский Фомин_Программирование на языке СИ_...doc
Скачиваний:
259
Добавлен:
10.08.2019
Размер:
53.81 Mб
Скачать

Звездочка.

Звездочка. Как уже упоминалось, звездочка '*' используется в качестве знака операции умножения и знака операции разыменования (получения доступа через указатель). В описаниях и определениях звездочка означает, что описывается (определяется) указатель на значение использованного в объявлении типа:

Обозначение присваивания.

Обозначение присваивания. Как уже упоминалось, для обозначения операции присваивания используется символ '='. Кроме того, в определении объекта он используется при его инициализации:

Признак препроцессорных средств.

Признак препроцессорных средств. Символ '#' (знак номера или диеза в музыке) используется для обозначения директив (команд) препроцессора. Если этот символ является первым отличным от пробела символом в строке программы, то строка воспринимается как директива препроцессора. Этот же символ используется в качестве одной из препроцессорных операций (см. гл. 3).

Без одной из препроцессорных директив обойтись совершенно невозможно - препроцессорная команда

#include <stdio.h>

включает в текст программы средства связи с библиотечными функциями ввода-вывода.

Директива #define уже введена при рассмотрении именованных препроцессорных констант. Остальные директивы и операции препроцессора можно рассматривать позже, что и будет сделано в главе 3.

1.6. Выражения и приведение арифметических типов

Введя константы, переменные, разделители и знаки операций, охарактеризовав основные типы данных и рассмотрев переменные, можно конструировать выражения. Каждое выражение состоит из одного или нескольких операндов, символов операций и ограничителей, в качестве которых чаще всего выступают круглые скобку ( ). Назначение любого выражения - формирование некоторого значения. В зависимости от типа формируемых значений определяются типы выражений. Если значениями выражения являются целые и вещественные числа, то говорят об арифметических выражениях.

В арифметических выражениях допустимы следующие операции:

+ - сложение (или унарная операция +);

- - вычитание (или унарная операция изменения знака);

* - умножение;

/ - деление;

% - деление по модулю (т.е. получение остатка от целочисленного деления первого операнда на второй).

Операндами для перечисленных операций служат константы и переменные арифметических типов, а также выражения, заключенные в круглые скобки.

Примеры выражений с двумя операндами:

Нужно быть аккуратным, применяя операцию деления ‘\’ к целочисленным операндам. Например, как мы уже упоминали выше, за счет округления результата значением выражения 5/3 будет 1, а соответствует ли это замыслам программиста, зависит от смысла той конкретной конструкции, в которой это выражение используется.

Чтобы результат выполнения арифметической операции был вещественным, необходимо, чтобы вещественным был хотя бы один из операндов. Например, значением выражения 5.0/2 будет 2.5, что соответствует смыслу обычного деления.

Операции *, /, % (см. табл. 1.4) имеют один ранг (3), операции +, - также один ранг (4), но более низкий. Арифметические операции одного ранга выполняются слева направо. Для изменения порядка выполнения операций обычным образом используются скобки. Например, выражение (d+b)/2.0 позволяет получить среднее арифметическое операндов d и b.

Как уже говорилось, введены специфические унарные операции ++ (инкремент) и -- (декремент) для изменения на 1 операнда, который в простейшем случае должен быть переменной (леводопустимым значением). Каждая из этих операций может быть префиксной и постфиксной:

• выражение ++m увеличивает на 1 значение m, и это полученное значение используется как значение выражения ++k (префиксная форма);

• выражение -- k уменьшает на 1 значение k, и это новое значение используется как значение выражения --k (префиксная форма);

• выражение i++ (постфиксная форма) увеличивает на 1 значение i, однако значением выражения i++ является предыдущее значение i (до его увеличения);

• выражение j-- (постфиксная форма) уменьшает на 1 значение], однако значением выражения j--является предыдущее значение j (до его уменьшения).

Например, если n равно 4, то при вычислении выражения n++*2 результат равен 8, а n примет значение 5. При n, равном 4, значением выражения ++n*2 будет 10, а n станет равно 5.

Внешнюю неоднозначность имеют выражения, в которых знак унарной операции ++ (или --) записан непосредственно рядом со знаком бинарной операции +:

х+++b или z---d

В этих случаях трактовка выражений однозначна и полностью определяется рангами операций (бинарные аддитивные + и - имеют ранг 4; унарные ++ и -- имеют ранг 2). Таким образом:

x +++b эквивалентно (x++)+b

z --d эквивалентно (z--)-d