-->
- это не оператор, это сочетание --
(постдекремент) и >
(больше, чем сравнение).
Цикл будет выглядеть более знакомым как:
#include <stdio.h>
int main() {
int x = 10;
while (x-- > 0) { // x goes to 0
printf("%d ", x);
}
}
Этот цикл является классической идиомой для перечисления значений между 10
(исключенная верхняя граница) и 0
включенной нижней границей, полезной для перебора элементов массива от последнего к первому.
Начальное значение 10
- это общее количество итераций (например, длина массива), плюс одно плюс первое значение, используемое внутри цикла. 0
- это последнее значение x
внутри цикла, поэтому комментарий x переходит в 0 .
Обратите внимание, что значение x
после завершения цикла равно -1
.
Обратите также внимание на то, что этот цикл будет работать таким же способом , если x
имеет беззнаковый тип , например size_t
, что является сильным преимуществом size_t
, что является сильным преимуществом 8372318782 над >.
По этой причине я на самом деле поклонник этого удивительного синтаксиса: while (x --> 0)
. Я считаю эту идиому привлекательной и элегантной, точно так же, как for (;;)
vs: while (1)
(которая выглядит сбивающе похожей на while (l)
). Он также работает на других языках, синтаксис которых основан на C: C ++, Objective-C, java, javascript, C # и многих других.
если вы используете его в цикле for, он требует обязательного подмигивания:
for (int x = 10; x --> 0 ;) ...