Junior
C++ da global va mahalliy o'zgaruvchilar qachon va qancha davom etadi?
sobes.tech AI
AIdan javob
Global o'zgaruvchilar
- Yashash muddati: Dastur ishga tushirilganidan boshlab tugaguniga qadar.
- Saqlash joyi: Odatda statik xotira maydonida (.data yoki .bss bo'limi bajariladigan fayl).
- Boshlang'ich holat:
- Fayl darajasida belgilangan, murakkab konstruktorlarga ega bo'lgan statik bo'lmagan global o'zgaruvchilar
main()chaqirilishidan oldin boshlanadi. - Nolga tenglangan (masalan, int i = 0;) global o'zgaruvchilar ham
main()dan oldin boshlanadi. constbilan belgilangan yoki statik saqlash muddati bo'lgan o'zgaruvchilar dastur yuklanganda boshlanadi.
- Fayl darajasida belgilangan, murakkab konstruktorlarga ega bo'lgan statik bo'lmagan global o'zgaruvchilar
- Mavjudlik: Ular barcha funksiyalarda ko'rinadi va doiradagi.
Mahalliy o'zgaruvchilar
- Yashash muddati: Kod blokida (funksiya, sikl, shart va boshqalar) belgilangan va undan chiqishgacha.
- Saqlash joyi: Odatda stekda (avtomatik o'zgaruvchilar uchun). Statik mahalliy o'zgaruvchilar statik xotira maydonida saqlanadi.
- Boshlang'ich holat:
- Mahalliy avtomatik o'zgaruvchilar standart holatda boshlanmaydi ("chigit" bilan to'ldirilgan). Aniq boshlang'ich holat talab qilinadi.
- Statik mahalliy o'zgaruvchilar bir marta boshlanadi ilk bor aniqlanganda.
- Mavjudlik: Faqat belgilangan kod blokida ko'rinadi.
Misollar
// Global o'zgaruvchi
int global_variable = 10;
void some_function() {
// Mahalliy o'zgaruvchi (avtomatik)
int local_variable_1; // Boshlanmagan
// Mahalliy o'zgaruvchi (avtomatik) va boshlang'ich holat bilan
int local_variable_2 = 20;
// Statik mahalliy o'zgaruvchi
static int static_local_variable = 30; // Bir marta boshlanadi
// Global o'zgaruvchiga kirish
global_variable++;
// Mahalliy o'zgaruvchilarga kirish
local_variable_1 = global_variable;
static_local_variable++;
// some_function() dan chiqib ketgach, local_variable_1 va local_variable_2 mavjud emas
// static_local_variable esa mavjud bo'lib, qiymatini saqlaydi
}
int main() {
some_function();
some_function(); // static_local_variable qiymatini saqlab qoldi
// Global o'zgaruvchi bu yerda mavjud
// local_variable_1 va local_variable_2 mavjud emas
return 0;
}
Taqqoslash jadvali
| Xususiyat | Global o'zgaruvchilar | Mahalliy o'zgaruvchilar (avtomatik) | Statik mahalliy o'zgaruvchilar |
|---|---|---|---|
| Yashash muddati | Dastur boshlanishidan tugashigacha | Belgilanganidan chiqishigacha | Birinchi aniqlashdan dastur tugashigacha |
| Saqlash joyi | Statik xotira maydoni (.data, .bss) | Stack | Statik xotira maydoni (.data, .bss) |
| Boshlang'ich holat | main() chaqirilishidan oldin yoki dastur yuklanganda |
Standart holatda boshlanmaydi. Aniq boshlang'ich holat talab qilinadi | Bir marta aniqlangandan so'ng boshlanadi |
| Mavjudlik | Fayl doirasida har joyda | Faqat belgilangan blokda | Faqat belgilangan blokda |