Sobes.tech
Junior

Кога и колко време съществуват глобалните и локалните променливи в C++?

sobes.tech AI

Отговор от AI

Глобални променливи

  • Време на съществуване: От стартирането на програмата до нейното приключване.
  • Място на съхранение: Обикновено в статична област на паметта (.data или .bss секции на изпълнимия файл).
  • Инициализация:
    • Нестатичните глобални променливи, определени на ниво файл, с комплексни конструктори, се инициализират преди извикването на main().
    • Променливите с нулева инициализация (например, int i = 0;) също се инициализират преди main().
    • Променливите, определени с const или с статичен живот, се инициализират при зареждане на програмата.
  • Достъпност: Видими във всички функции в рамките на областта на видимост.

Локални променливи

  • Време на съществуване: От определянето на променливата вътре в блок (функция, цикъл, условен оператор и т.н.) до изхода от този блок.
  • Място на съхранение: Обикновено на стека (за автоматични променливи). Статичните локални променливи се съхраняват в статичната област на паметта.
  • Инициализация:
    • Автоматичните локални променливи не се инициализират по подразбиране (съдържат "мръсотия"). Изисква се явна инициализация.
    • Статичните локални променливи се инициализират веднъж при първото им достигане.
  • Достъпност: Видими само вътре в блока, където са определени.

Примери

// Глобална променлива
int global_variable = 10;

void some_function() {
    // Локална променлива (автоматична)
    int local_variable_1; // Без инициализация

    // Локална променлива (автоматична) с инициализация
    int local_variable_2 = 20;

    // Статична локална променлива
    static int static_local_variable = 30; // Инициализира се веднъж

    // Достъп до глобалната променлива
    global_variable++;

    // Достъп до локалните променливи
    local_variable_1 = global_variable;
    static_local_variable++;
}

int main() {
    some_function();
    some_function(); // static_local_variable запази стойността си
    // Глобалната променлива е достъпна тук
    // local_variable_1 и local_variable_2 не са достъпни

    return 0;
}

Таблица за сравнение

Характеристика Глобални променливи Локални променливи (автоматични) Статични локални променливи
Време на съществуване От стартирането на програмата до нейното приключване От определянето до изхода от блока кода От първото достигане до края на програмата
Място на съхранение Статична област на паметта (.data, .bss) Стек Статична област на паметта (.data, .bss)
Инициализация Преди извикването на main() или при зареждане на програмата Не се инициализират по подразбиране. Изисква се явна инициализация Един път при първото достигане
Достъпност Вижда се навсякъде в областта на видимост на файла Само вътре в блока, където са определени Само вътре в блока, където са определени