Junior
Mikor és meddig léteznek a globális és helyi változók C++-ban?
sobes.tech MI
Válasz az MI-től
Globális változók
- Létezési idő: A program indításától a befejezéséig.
- Tárolási hely: Általában statikus memória területen (.data vagy .bss szekciók az végrehajtható fájlban).
- Inicializálás:
- A fájl szintjén meghatározott nem statikus globális változók, összetett konstruktorokkal, a
main()hívása előtt inicializálódnak. - A nullára inicializált globális változók (pl. int i = 0;) szintén a
main()előtt inicializálódnak. - A
const-tal vagy statikus élettartammal rendelkező változók a program betöltésekor inicializálódnak.
- A fájl szintjén meghatározott nem statikus globális változók, összetett konstruktorokkal, a
- Elérhetőség: Láthatóak minden funkcióban a láthatósági területen belül.
Lokális változók
- Létezési idő: A változó meghatározásának pillanatától a kódblokk (függvény, ciklus, feltétel stb.) elhagyásáig.
- Tárolási hely: Általában a veremben (automatikus változók esetén). A statikus lokális változók a statikus memória területen tárolódnak.
- Inicializálás:
- Az automatikus lokális változók alapértelmezés szerint nem inicializáltak (szemét értékeket tartalmaznak). Kifejezett inicializálás szükséges.
- A statikus lokális változók egyszer inicializálódnak az első eléréskor.
- Elérhetőség: Csak a kódblokkban, ahol meghatározásra kerültek.
Példák
// Globális változó
int global_variable = 10;
void some_function() {
// Lokális változó (automatikus)
int local_variable_1; // Inicializálatlan
// Lokális változó (automatikus) inicializálással
int local_variable_2 = 20;
// Statikus lokális változó
static int static_local_variable = 30; // Egyszer inicializálódik
// Hozzáférés a globális változóhoz
global_variable++;
// Hozzáférés a lokális változókhoz
local_variable_1 = global_variable;
static_local_variable++;
}
int main() {
some_function();
some_function(); // static_local_variable megtartotta az értékét
// A globális változó elérhető itt
// A local_variable_1 és local_variable_2 nem elérhetőek
return 0;
}
Összehasonlító táblázat
| Jellemző | Globális változók | Lokális változók (automatikus) | Statikus lokális változók |
|---|---|---|---|
| Létezési idő | A program indításától a befejezéséig | A változó meghatározásától a blokk elhagyásáig | Az első meghatározásától a program végéig |
| Tárolási hely | Statikus memória terület (.data, .bss) | Verem (stack) | Statikus memória terület (.data, .bss) |
| Inicializálás | main() hívása előtt vagy a program betöltésekor |
Alapértelmezés szerint nem inicializált. Kifejezett inicializálás szükséges | Egyszer az első eléréskor inicializálódik |
| Elérhetőség | Mindenhol a fájl láthatósági területén | Csak a blokkban, ahol meghatározva van | Csak a blokkban, ahol meghatározva van |