Что значит, игнорируется? Просто после первого выполнения внутреннего цикла, j так и останется равной n и потому внутренний цикл будет выполнен только один раз. (это еще повезло, что в С++ глобальные переменные инициализируются нулем)
А все потому, что говорила же мама объявлять переменные как можно ближе к месту использования :)
Это скорее пессимизация! Дело в том, что компилятор, <i>вообще говоря</i>, не может быть уверен, что глобальные переменные не могут быть изменены где-нибудь еще. Ну, например, внутри объекта in в операции <code>in >> a[I][j]</code>. Поэтому, в общем случае, он не может записать их в регистры и не синхронизировать с памятью, как мог бы у случае локальных переменных, а вынужден читать их из памяти и писать обратно при каждом обращении.