Это похоже на домашнее задание, но я все равно укушу.
Чтобы использовать x, который вы определили здесь в классе или функции из другого файла, вы должны использовать
extern int x;
Если вы используете переменную x (как в заголовке), вы можете использовать x так же, как в main ().extern сообщает компилятору, что вы используете переменную, которая определена / создана в другом месте.
Если вы хотите, чтобы она существовала до запуска main, то вы используете static, который обрабатывается до запуска main ().Другими словами, он загружает пространство памяти с переменными до начала какой-либо обработки (в основном).
Что касается того, почему при запуске он равен 0, то, скорее всего, ваш компилятор присваивает ему базовое значение.Не все компиляторы делают это, если я не ошибаюсь, многие просто дадут вам то, что было в пространстве памяти, выделенном для x, которое может быть чем угодно.Другими словами, они дают вам память, заполненную теми данными (или частичными данными), которые были в ней заранее.