Этот цикл заканчивается с x
, равным -1
(при условии, что x
подписано), но его тело не будет создавать доступ к array[-1]
на последнем шаге.Последний доступ к массиву - array[0]
.Поведение является одинаковым для всех реализаций.
Другими словами, в коде, который вы цитировали, нет проблем с доступом к массиву отрицательных индексов.Но если вы попытаетесь получить доступ к array[x]
сразу после цикла, тогда вы действительно получите доступ к array[-1]
.
Код, который вы процитировали, представляет собой вариант довольно известного шаблона реализации, используемого, когда нужноитерация в обратном направлении по массиву с использованием переменной unsigned в качестве индекса.Например,
unsigned x;
int a[5];
for (x = 5; x-- > 0; )
a[x] = 0;
Иногда менее опытным программистам трудно использовать индексы без знака при повторной итерации по массиву.(Так как переменные без знака никогда не имеют отрицательных значений, наивная реализация условия завершения цикла как x >= 0
не работает.) Этот подход - то есть постинкремент в условии завершения цикла - это то, что работает в таких случаях.(Конечно, он работает и со знаковыми индексами).