C programming для начинающих: часть 13 – операторы инкремента и декремента

 

Предыдущая часть

В предыдущем уроке мы рассматривали код, в котором помимо прочего использовались следующие операторы:

...
    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]

Продолжение.