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() чакырылгандан мурун же программа жүктөлгөндө |
Алдын ала инициализацияланбайт. Ачык инициализация талап кылынат | Бир жолу биринчи жеткенде инициализацияланат |
| Жеткиликтүүлүк | Файлдын бардык функцияларында көрүнөт | Тек ошол блоктун ичинде гана көрүнөт | Тек ошол блоктун ичинде гана көрүнөт |