В C++
имеется богатый набор операций, с помощью которых в выражениях образуются
новые значения и изменяются значения переменных. Поток управления
в программе задаётся с помощью операторов, а описания используются
для введения в программе имён переменных, констант и т. д. Описания
являются операторами, поэтому они свободно могут сочетаться с другими
операторами [10].
4.9.1.
Выражения
В
C++ имеется большое число операций, и они будут объясняться там, где
(и если) это потребуется. Следует учесть, что операции:
~ – дополнение;
& – И;
^ – исключающее ИЛИ;
| – включающее ИЛИ;
<< – логический сдвиг влево;
>> – логический сдвиг вправо
применяются к целым, и что нет отдельного типа данных для логических
действий.
Смысл операции зависит от числа операндов; унарное & является
операцией взятия адреса, а бинарное & – это операция логического
И. Смысл операции зависит также от типа её операндов: + в выражении
a + b означает сложение с плавающей точкой, если операнды имеют тип
float, но целое сложение, если они типа int.
Можно
определить операцию для типа, определяемого пользователем, без потери
её значения, предопределённого для основных и производных типов.
В C++ есть операция присваивания =, а не оператор присваивания, как
в некоторых языках. Таким образом, присваивание может встречаться
в неожиданном контексте; например:
x=sqrt(a=3*x);
a=b=c;
Это означает присвоение c объекту b, а затем объекту a. Другим свойством
операции присваивания является то, что она может совмещаться с большинством
бинарных операций, например:
x[i+3]*=4
Это означает x[i + 3] = x[i + 3]*4, за исключением того факта, что
выражение x[i + 3] вычисляется только один раз.
4.9.2. Указатели
В большинстве программ на C++ широко применяются указатели.
Это
унарная операция, называемая косвенной адресацией.
Например, если имеется char* p, то *p есть символ, на который указывает
p. Часто при работе с указателями бывают полезны операция увеличения
++ и операция уменьшения --.
Предположим, p указывает на элемент вектора v, тогда p++ делает p
указывающим на следующий элемент.
Указатель может содержать адрес объекта соответствующего типа:
char c;
p = &c // p указывает на c
Унарное & является операцией взятия адреса.
Указатель
— это переменная, которая содержит адрес другого объекта. Этим объектом
может быть некоторая переменная, динамический объект или функция.
Говорят, что указатель ссылается на соответствующий объект. Хотя адрес,
по существу — 32-битное целое число, определяющее положение объекта
в виртуальной памяти программы, указатель является не просто целым
числом, а специальным типом данных. Он «помнит», на какого рода данные
ссылается. Объявление указателя выглядит так:
тип_указываемого_объекта *имя_указателя [= значение];
Примеры
объявлений:
int *pIntVar; // Указатель на целое.
double *pDouble = SdoubleVar; // Инициализация указателя на double.
char *arrStr[16]; // Массив указателей на char.
char (*arrStr) [16][16]; // Указатель на матрицу char.