Здавалка
Главная | Обратная связь

Инкремент и декремент.



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

1.Инкремент – обозначается конструкцией ++. Данный оператор увеличивает содержимое любой переменной на единицу и перезаписывает значение переменной. Например,

int a=8;cout<<a; // на экране число 8a++;cout<<a; // на экране число 9

2.Декремент – обозначается конструкцией --. Данный оператор уменьшает содержимое любой переменной на единицу и перезаписывает значение переменной. Например,

int a=8;cout<<a; // на экране число 8a--;cout<<a; // на экране число 7

Достаточно просто, не правда ли?! Такие выражения могут быть представлены и так: a=a+1 или a=a-1. Следует отметить, что для литералов ни инкремент, ни декремент не используются, т. к. совершенно не логично поступать следующим образом 5=5+1. Это явная ошибка. Однако на этом мы не закончим знакомство с инкрементом и декрементом. В прошлом разделе урока мы выяснили, что синтаксис унарного оператора, может быть не только таким

операнд оператор;

, но и таким

оператор операнд;

Такие формы записи носят название постфиксной, (оператор располагается после значения) и префиксной(оператор располагается до значения). И инкремент, и декремент обладают обеими формами. Давайте разберемся, какие есть различия между формами, и в каких случаях эти различия имеют значение.

Пример 1.

int a=8;cout<<a; // на экране число 8a++;cout<<a; // на экране число 9++a;cout<<a; // на экране число 10

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

Пример 2.

int a=8;cout<<++a; // на экране число 9cout<<a++; // на экране число 9cout<<a; // на экране число 10

Прежде чем разбирать пример, давайте установим три правила:

1. Принцип выполнения команд в языке С неоднозначен. Поэтому ниже приводится таблица направления действия некоторых операторов:

2. Если кроме постфиксной формы инкремента или декремента, в строке есть еще какая-либо команда, то сначала выполняется эта команда, и только потом инкремент или декремент независимо от расположения команд в строке.

3. Если кроме префиксной формы инкремента или декремента, в строке есть еще какая-либо команда, то все команды в строке выполняются справа налево согласно приоритету операторов.

Теперь более подробно о примере:

• Изначально значение переменной равно числу 8.

• Команда cout<<++a; содержит префиксную форму оператора инкремент, следовательно, используя третье правило, описанное выше, мы сначала увеличиваем значение переменной а на единицу, а затем показываем его на экран с помощью команды cout<<.

• Команда cout<<a++; содержит постфиксную форму оператора инкремент, следовательно, используя второе правило, описанное выше, мы сначала показываем значение переменной (всё еще 9) на экран с помощью команды cout<<, а затем увеличиваем значение переменной a на единицу.

• При выполнении следующей команды cout<<a; будет показано уже измененное (увеличенное) значение, то есть число 10.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.