このサイクルは(署名されていると仮定して)x等しいで終了しますが、その本体は最後のステップでへのアクセスを生成しません。最後の配列アクセスはへです。動作はすべての実装で一貫しています。-1xarray[-1]array[0]
つまり、引用したコードでの負のインデックス配列アクセスに問題はありません。array[x]ただし、サイクルの直後にアクセスしようとすると、実際ににアクセスしますarray[-1]。
引用したコードは、符号なし変数をインデックスとして使用して配列を逆方向に反復する必要がある場合に使用される、かなりよく知られている実装パターンのバリエーションです。例えば
unsigned x;
int a[5];
for (x = 5; x-- > 0; )
a[x] = 0;
経験の浅いプログラマーは、配列を逆方向に反復するときに符号なしインデックスを使用するのに問題がある場合があります。(符号なし変数が負の値になることはないため、サイクル終了条件の単純な実装はx >= 0機能しません。)このアプローチ(つまり、サイクル終了条件のポストインクリメント)は、このような場合に機能します。(もちろん、署名されたインデックスでも機能します)。