В C индексы массива начинаются с 0, переменная массива содержит адрес первого элемента,
*array-----+
|
V
+-+-+-+-+
|1|2|3|4|
+-+-+-+-+
, что означает, что если вы добавите 1 к этому адресу (array [1]), вы получите второй элемент , а не первый
array[1]-----+
|
V
+-+-+-+-+
|1|2|3|4|
+-+-+-+-+
Это означает, что вы начинаете отсчет от «size - 1» до «0» , отсчитывая от «size» вы выходите за пределы границ массива