Зуева не читали, как пишутся компиляторы? Проинтерпретировать вряд ли, а вот разложить внутрях по-своему - запросто. Чтобы результат отличался не встречал, а вот на отличия внутренней реализации нарывался. Давно было и не под uC. С тех пор у меня тихое помешательство на указателях и мелкие приступы паранойи в вопросах индексации ;)).
Кстати, а зачем объявлять указатель внутри цикла?
Что касаемо оптимизации, то выше приведенное и без всяких подмассивов делается:
i=sizeof(arr);
ptr_arr=&arr[N-1][N-1];
while(i--)
{
*ptr_arr-- +=20;
}
Мы не будем ждать милостей от компилятора. ;)