Почему это допустимо? Разве память для массива не выделяется во время компиляции? И почему sizeof корректно определяет размер mas (если, например, ввести n = 5, то sizeof(mas) будет равен 20 байтам при sizeof(int) равном 4 байтам в моей системе)?
Я компилирую этот код с помощью MinGW x64