В предыдущем уроке мы рассматривали код, в котором помимо прочего использовались следующие операторы:
... a = 10; a++; printf( "a++ : %d\n", a ); a = 10; a--; printf( "a-- : %d\n", a ); ...
Тут операторы “++
” и “--
” являются операторами инкремента и декремента соответственно, единственной задачей которых является увеличить значение на 1 (инкремент) или наоборот уменьшить на единицу (декремент) значение переменной.
Их можно записать в более привычном виде так:
#include <stdio.h> int main () { int a, b; a = 10; b = 20; printf("A: %d\nB: %d\n", a, b); a++; b--; printf("A: %d\nB: %d\n", a, b); a = a + 1; b = b -1; printf("A: %d\nB: %d\n", a, b); }
Результат:
[simterm]
$ ./incdec A: 10 B: 20 A: 11 B: 19 A: 12 B: 18
[/simterm]
Кроме того – вы уже могли встречать операторы инкремента в циклах for
в примерах ранее:
... for( i = 0; i <= 127; i++) { ...
Операторы инкремента и декремента могут префиксными:
... ++i; ...
И постфиксными:
... i++; ...
Рассмотрим такой пример:
int main () { int num1, num2; printf( "\nPrefix and Postfix operators... (num1 = 10)\n"); num1 = 10; num2 = num1++; // num2 = 10, num1 = 11; printf( "\nnum2 = num1++; so num2 = %d and num1 = %d\n", num2, num1); num1 = 10; num2 = ++num1; // num2 = 11, num1 = 11 printf( "\nnum2 = ++num1; so num2 = %d and num1 = %d\n", num2, num1); }
Позиция оператора влияет на очередность выполнения операции.
В префиксном варианте:
... num2 = num1++; ...
Будет выполнено сначала num2 + num1
, а потом +1
.
В постфиксном:
... num2 = ++num1; ...
Сначала будет выполнено увеличение num1
на единицу, а потом num2 + num1
.
Проверяем:
[simterm]
$ ./pref_post Prefix and Postfix operators... (num1 = 10) num2 = num1++; so num2 = 10 and num1 = 11 num2 = ++num1; so num2 = 11 and num1 = 11
[/simterm]
Продолжение.