В том примере, что привел misyachniy переменная n используется ТОЛЬКО для подсчета итераций. Компилятор это видит и может из пред-условия (типа for) сделать пост-условие ( do{}while() ). В вашем случае что-то происходит с переменной n внутри тела. Таким образом, эти циклы, строго говоря, не эквивалентны.