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. constilə müəyyən edilmiş və ya statik ömrü olan dəyişənlər proqram yüklənərkən ilkinləşdirilir.
- Fayl səviyyəsində müəyyən edilmiş statik olmayan qlobal dəyişənlər, mürəkkəb konstruktivlərlə
- Ə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 |