Я думаю, что все из-за оптимизации компилятора - он видимо вычисляет значение на этапе компиляции и все.
А тот способ, о котором я тебе выше говорил (с #define) такой:
в начале файла где всякие #include пишешь:
- Код: Выделить всё • Развернуть
#define RAZMER = 5
а потом a том месте, где массивы определяешь:
- Код: Выделить всё • Развернуть
int pas[RAZMER]={1,2,3,4,5};
int ent[RAZMER];
#define - это директива предварительного парсера - перед тем, как текст проги будет откомпилирован, она скармливается этому парсеру и он обрабатывает директивы. Все, что начинается с # - это указания этому парсеру.
Например, когда ты пишешь #include <aaaa.h> - это указание парсеру всунуть в текст вместо этой строки текст из файла "аааа.h".
Так и с #define - парсер знает, что все строчки "RAZMER" в тексте надо заменить на "5".
И только после того, как текст проги обработан парсером, он скармливается компилятору. Т.е. компилятор думает, что ты изначально в тексте написал так:
- Код: Выделить всё • Развернуть
int pas[5]={1,2,3,4,5};
int ent[5];
Вот такая полезная штука