
В предыдущем уроке мы рассматривали код, в котором помимо прочего использовались следующие операторы:
...
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]
Продолжение.
2 072 views