Проблема в том, что целое число без знака никогда не бывает отрицательным.
Следовательно, петля-тест:
i >= 0
всегда будет правдой. Таким образом, вы получите бесконечный цикл.
Когда значение падает ниже нуля, оно оборачивается до наибольшего значения unsigned
.
Таким образом, вы также будете получать доступ к x[i]
за пределами .
Это не проблема для целых чисел со знаком, потому что он просто станет отрицательным и, следовательно, потерпит неудачу i >= 0
.
Таким образом, если вы хотите использовать целые числа без знака, вы можете попробовать одну из следующих возможностей:
for (unsigned int i = 9; i-- != 0; )
и
for (unsigned int i = 9; i != -1; i--)
Эти два были предложены GManNickG и AndreyT из комментариев.
А вот мои оригинальные 3 версии:
for (unsigned int i = 9; i != (unsigned)0 - 1; i--)
или
for (unsigned int i = 9; i != ~(unsigned)0; i--)
или
for (unsigned int i = 9; i != UINT_MAX; i--)