(си) Почему не выполняется присваивание в цикле, а если есть другой цикл то выполнется

Простое присвоение значений элементам массива arr в цикле while не выполняется, хотя сам цикл работает (перебор по i корректный). ПРИЧЕМ если переписать цикл через for и добавить код ДО цикла while (закоменчен) - присваивание корректное. Что за бред? )

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int *arr = NULL; 
   int arrSize = 4;
   int i = 0;
   
   arr = (int*)realloc(arr, arrSize*sizeof(int));
   
   /*
   for(i = 0; i < arrSize; ++i){
       arr[i] = i;
       printf("for loop i = %d arr[i] = %d \n",i, arr[i]);
   }    
   i = 0;
   */
   
   while(i < arrSize){
       arr[i] = i;
       ++i;
       printf("while loop i = %d arr[i] = %d \n",i, arr[i]);
       }
       
   return 0;
}

Вывод полный / вывод с закоментированным куском


Ответы (1 шт):

Автор решения: Harry

Только три строки...

arr[i] = i;  
++i;
printf("while loop i = %d arr[i] = %d \n",i, arr[i]);

Т.е. присваиваете вы i-ое значение, увеличиваете i и выводите по сути i+1-ое значение (следующее, еще не присвоенное)...

Понятно, что в цикле for вы присваиваете верные значения, а потом в while их читаете, вот и вся "магия"...

Честное слово, ну стыдно же даже на такие простые вопросы отвечать...

→ Ссылка