Sobes.tech
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.
    • const bilan belgilangan yoki statik saqlash muddati bo'lgan o'zgaruvchilar dastur yuklanganda boshlanadi.
  • 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