Sobes.tech
Junior

C++-da qlobal və yerli dəyişənlər nə zaman və nə qədər müddətə mövcuddur?

sobes.tech Süni İntellekt

AI-dan cavab

Qlobal dəyişənlər

  • Mövcud olma müddəti: Proqramın işə başlamasından bitməsinə qədər.
  • Yadda saxlanma yeri: Adətən statik yaddaş sahəsində (.data və ya .bss bölmələri icra faylında).
  • İlkinləşdirmə:
    • Fayl səviyyəsində müəyyən edilmiş statik olmayan qlobal dəyişənlər, mürəkkəb konstruktivlərlə main() çağırılmadan əvvəl ilkinləşdirilir.
    • Sıfırla ilkinləşdirilmiş qlobal dəyişənlər (məsələn, int i = 0;) da main()-dən əvvəl ilkinləşdirilir.
    • const ilə müəyyən edilmiş və ya statik ömrü olan dəyişənlər proqram yüklənərkən ilkinləşdirilir.
  • Əlçatanlıq: Görünür bütün funksiyalarda və görünüş sahəsində.

Lokal dəyişənlər

  • Mövcud olma müddəti: Dəyişənin blok daxilində (funksiya, dövr, şərt operatoru və s.) müəyyən edildiyi andan çıxış edənə qədər.
  • Yadda saxlanma yeri: Adətən yığın (avtomatik dəyişənlər üçün). Statik lokal dəyişənlər statik yaddaş sahəsində saxlanılır.
  • İlkinləşdirmə:
    • Avtomatik lokal dəyişənlər standart olaraq ilkinləşdirilmir (məzmunu "qarışıq" olur). Aydın ilkinləşdirmə tələb edir.
    • Statik lokal dəyişənlər ilk dəfə müəyyən edildikdə bir dəfə ilkinləşdirilir.
  • Əlçatanlıq: Yalnız müəyyən edildiyi blok daxilində görünür.

Nümunələr

// Qlobal dəyişən
int global_variable = 10;

void some_function() {
    // Lokal dəyişən (avtomatik)
    int local_variable_1; // İlkinləşdirilməyib

    // Lokal dəyişən (avtomatik) və ilkinləşdirilmiş
    int local_variable_2 = 20;

    // Statik lokal dəyişən
    static int static_local_variable = 30; // Bir dəfə ilkinləşdirilir

    // Qlobal dəyişənə çıxış
    global_variable++;

    // Lokal dəyişənlərə çıxış
    local_variable_1 = global_variable;
    static_local_variable++;

    // some_function()-dən çıxandan sonra, local_variable_1 və local_variable_2 mövcud olmur
    // static_local_variable isə mövcud olaraq qalır və dəyərini saxlayır
}

int main() {
    some_function();
    some_function(); // static_local_variable dəyərini saxlayıb
    // Qlobal dəyişən burada əlçatandır
    // local_variable_1 və local_variable_2 əlçatan deyil

    return 0;
}

Müqayisə cədvəli

Xüsusiyyət Qlobal dəyişənlər Lokal dəyişənlər (avtomatik) Statik lokal dəyişənlər
Mövcud olma müddəti Proqramın işə başlamasından bitməsinə qədər Dəyişənin müəyyən edildiyi andan çıxış edənə qədər Dəyişənin ilk dəfə müəyyən edildiyi andan proqram bitənə qədər
Yadda saxlanma yeri Statik yaddaş sahəsi (.data, .bss) Yığın (stək) Statik yaddaş sahəsi (.data, .bss)
İlkinləşdirmə main()-dən əvvəl və ya proqram yüklənərkən Standart olaraq ilkinləşdirilmir. Aydın ilkinləşdirmə tələb edir Bir dəfə ilkinləşdirilir, ilk dəfə müəyyən edildikdə
Əlçatanlıq Fayl daxilində hər yerdə görünür Yalnız blok daxilində görünür Yalnız blok daxilində görünür