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() или при зареждане на програмата |
Не се инициализират по подразбиране. Изисква се явна инициализация | Един път при първото достигане |
| Достъпност | Вижда се навсякъде в областта на видимост на файла | Само вътре в блока, където са определени | Само вътре в блока, където са определени |