Префиксная декрементация в цикле for - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа проходит по массиву и находит чётные элементы. Вопрос возник со вторым циклом for:
for (--evenCounter; evenCounter >= 0; evenCounter--)
При входе в цикл значение переменной сразу же уменьшается на 1(--evenCounter). Постфиксная декрементация (evenCounter--) осуществляется при второй петле цикла, но не осуществляется префиксная, как показала следующая работа программы:

evenCounter before = 5 evenCounter in loop = 4 10 evenCounter in loop = 3 8 evenCounter in loop = 2 6 evenCounter in loop = 1 4 evenCounter in loop = 0 2

Как я понимаю эту программу, то во второй петле цикла значение evenCounter должно изменяться дважды на 1-цу(т.е будет выполняться --evenCounter и evenCounter--), а оно изменяется каждый и последующий раз только на одну 1-цу. Так получается, что префиксная декрементация выполняется только один раз при первом вхождении в цикл. Почему в последующем префиксная декрементация (--evenCounter) игнорируется?
#include <stdio.h>
 
int main() {
    int A[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int even[10];
    int evenCounter = 0;
    int *iter, *end;
   
    for (iter = A, end = &A[10]; iter < end; iter++) {
        if (*iter % 2 == 0) {
            even[evenCounter++] = *iter;
        }
    }
 
    printf("evenCounter before = %d\n", evenCounter);
    for (--evenCounter; evenCounter >= 0; evenCounter--) {
        printf("evenCounter in loop = %d\n", evenCounter);
        printf("%d \n", even[evenCounter]);
    }
return 0;
}

Решение задачи: «Префиксная декрементация в цикле for»

textual
Листинг программы
for (инициализация переменных; проверка условия; изменение счетчика)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы