Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Операторы инкремента и декремента в C: использование и лучшие практики

C — Операторы инкремента и декремента

Оператор инкремента (++) увеличивает значение переменной на 1, а оператор декремента (--) уменьшает его на 1.

Операторы инкремента и декремента часто используются при построении счётных циклов в C (с циклом for). Они также применяются при обходе массивов и указательной арифметике.

Операторы ++ и -- унарны и могут использоваться как префикс или постфикс к переменной.

Пример операторов инкремента и декремента

Следующий пример содержит несколько операторов, демонстрирующих использование операторов инкремента и декремента с разными вариациями —

#include <stdio.h>
int main() {
    int a = 5, b = 5, c = 5, d = 5;
    a++; // постфиксный инкремент
    ++b; // префиксный инкремент
    c--; // постфиксный декремент
    --d; // префиксный декремент
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
    printf("d = %d\n", d);
    return 0;
}

Вывод

При запуске этот код выдаст следующий вывод —

a = 6
b = 6
c = 4
d = 4

Пояснение примера

Другими словами, a++ имеет тот же эффект, что и ++a — оба выражения увеличивают значение переменной a на 1. Аналогично, a-- эквивалентно --a.

Выражение a++; можно рассматривать как эквивалент оператора a = a + 1;. Здесь выражение справа прибавляет 1 к a, и результат присваивается обратно в a, тем самым увеличивая значение a на 1.

Подобно этому, b--; эквивалентно b = b - 1;.

Типы оператора инкремента

Существует два типа операторов инкремента — преинкремент и постинкремент.

Префиксный (Pre) оператор инкремента

В выражении преинкремент увеличивает значение переменной на 1 до использования значения переменной.

Синтаксис

++variable_name;

Пример

В следующем примере используется преинкремент, где значение x увеличивается на 1, а затем увеличенное значение используется в выражении.

#include <stdio.h>
int main() {
    int x = 10;
    int y = 10 + ++x;
    printf("x = %d, y = %d\n", x, y);
    return 0;
}

При запуске этот код выдаст следующий вывод —

x = 11, y = 21

Постфиксный (Post) оператор инкремента

В выражении постинкремент увеличивает значение переменной на 1 после использования значения переменной.

Синтаксис

variable_name++;

Пример

В следующем примере используется постинкремент, где значение x используется в выражении, а затем увеличивается на 1.

#include <stdio.h>
int main() {
    int x = 10;
    int y = 10 + x++;
    printf("x = %d, y = %d\n", x, y);
    return 0;
}

При запуске этот код выдаст следующий вывод —

x = 11, y = 20

Типы оператора декремента

Существует два типа операторов декремента — предекремент и постдекремент.

Префиксный (Pre) оператор декремента

В выражении предекремент уменьшает значение переменной на 1 до использования значения переменной.

Синтаксис

--variable_name;

Пример

В следующем примере используется предекремент, где значение x уменьшается на 1, а затем уменьшенное значение используется в выражении.

#include <stdio.h>
int main() {
    int x = 10;
    int y = 10 + --x;
    printf("x = %d, y = %d\n", x, y);
    return 0;
}

При запуске этот код выдаст следующий вывод —

x = 9, y = 19

Постфиксный (Post) оператор декремента

В выражении постдекремент уменьшает значение переменной на 1 после использования значения переменной.

Синтаксис

variable_name--;

Пример

В следующем примере используется постдекремент, где значение x используется в выражении, а затем уменьшается на 1.

#include <stdio.h>
int main() {
    int x = 10;
    int y = 10 + x--;
    printf("x = %d, y = %d\n", x, y);
    return 0;
}

При запуске этот код выдаст следующий вывод —

x = 9, y = 20

Дополнительные примеры операторов инкремента и декремента

Пример 1

Следующий пример подчёркивает использование префиксных/постфиксных инкремента/декремента —

#include <stdio.h>
int main(){
    char a = 'a', b = 'M';
    int x = 5, y = 23;
    printf("a: %c b: %c\n", a, b);
    a++;
    printf("postfix increment a: %c\n", a);
    ++b;
    printf("prefix increment b: %c\n", b);
    printf("x: %d y: %d\n", x, y);
    x--;
    printf("postfix decrement x : %d\n", x);
    --y;
    printf("prefix decrement y : %d\n", y);
    return 0;
}

Вывод

При запуске этот код выдаст следующий вывод —

a: a b: M
postfix increment a: b
prefix increment b: N
x: 5 y: 23
postfix decrement x: 4
prefix decrement y: 22

Приведённый выше пример показывает, что префиксные и постфиксные операторы оказывают одинаковое влияние на значение операнда. Однако, когда эти операторы ++ или -- появляются вместе с другими операторами в выражении, они ведут себя по-разному.

Пример 2

В следующем коде начальные значения переменных a и b одинаковы, но функция printf() выводит разные значения —

#include <stdio.h>
int main(){
    int x = 5, y = 5;
    printf("x: %d y: %d\n", x,y);
    printf("postfix increment x: %d\n", x++);
    printf("prefix increment y: %d\n", ++y);
    return 0;
}

Вывод

Запустите код и проверьте его вывод —

x: 5 y: 5
postfix increment x: 5
prefix increment y: 6

В первом случае функция printf() печатает значение x, а затем увеличивает его. Во втором случае оператор инкремента выполняется первым, и функция printf() использует увеличенное значение для печати.

Приоритет операторов инкремента и декремента

В C существует множество операторов. Когда в выражении используются несколько операторов, они выполняются согласно их порядку приоритета. Операторы инкремента и декремента ведут себя по-разному при использовании с другими операторами.

Когда выражение состоит из операторов инкремента или декремента вместе с другими операторами, операции инкремента и декремента выполняются первыми. Постфиксные операторы инкремента и декремента имеют более высокий приоритет, чем префиксные.

Читайте также: Приоритет операторов в C

Пример 1

Посмотрите на следующий пример —

#include <stdio.h>
int main(){
    int x = 5, z;
    printf("x: %d \n", x);
    z = x++;
    printf("x: %d z: %d\n", x, z);
    return 0;
}

Вывод

Запустите код и проверьте его вывод —

x: 5
x: 6 z: 5

Поскольку x++ увеличивает значение x до 6, вы могли ожидать, что z тоже будет 6. Однако результат показывает z как 5. Это потому, что оператор присваивания имеет более высокий приоритет, чем постфиксный оператор инкремента. Поэтому существующее значение x присваивается в z до инкремента x.

Пример 2

Посмотрите на другой пример ниже —

#include <stdio.h>
int main(){
    int x = 5, y = 5, z;
    printf("x: %d y: %d\n", x,y);
    z = ++y;
    printf("y: %d z: %d\n", y ,z);
    return 0;
}

Вывод

При запуске этот код выдаст следующий вывод —

y: 5
y: 6 z: 6

Результат может сбить с толку, так как значение y и z теперь 6. Причина в том, что префиксный оператор инкремента имеет более высокий приоритет, чем оператор присваивания. Поэтому y сначала увеличивается, а затем его новое значение присваивается в z.

Ассоциативность операторов также играет важную роль. Для операторов инкремента и декремента ассоциативность слева направо. Следовательно, если в одном выражении несколько операторов инкремента или декремента, левый выполняется первым, движясь вправо.

Пример 3

В этом примере выражение присваивания содержит как префиксные, так и постфиксные операторы.

#include <stdio.h>
int main(){
    int x = 5, y = 5, z;
    z = x++ + ++y;
    printf("x: %d y: %d z: %d\n", x,y,z);
    return 0;
}

Вывод

Запустите код и проверьте его вывод —

x: 6 y:6 z: 11

В этом примере первой выполняется операция ++y (y становится 6). Затем оператор + складывает x (которое равно 5) и y, результат присваивается в z как 11, и затем x++ увеличивает x до 6.

Использование оператора инкремента в цикле

В C наиболее часто используемый синтаксис цикла for выглядит так —

for (init_val; final_val; increment) {
    statement(s);
}

Пример

Тело цикла выполняется для всех значений переменной между начальным и конечным значениями, увеличивая её после каждого прохода.

#include <stdio.h>
int main(){
    int x;
    for (x = 1; x <= 5; x++){
        printf("x: %d\n", x);
    }
    return 0;
}

Вывод

При запуске этот код выдаст следующий вывод —

x: 1
x: 2
x: 3
x: 4
x: 5

Язык C

  1. Рекурсия в C: основы, примеры и условия выхода
  2. C++ Struct vs Class: ключевые отличия, синтаксис и лучшие сценарии использования
  3. Guru99: комплексные онлайн-учебники и обзоры бизнес-софта
  4. Работа с файлами в C# — практическое руководство
  5. calloc() в C: выделение обнулённой памяти и практический пример
  6. Указатели и массивы в C++: мастерство взаимодействия
  7. Принятие решений в C#: условные конструкции if, else, switch
  8. Функции с переменным числом аргументов в C: практическое руководство
  9. Освоение операторов using в C#: импорт, псевдонимы и статические директивы
  10. Язык программирования C: обзор, история и области применения