Változók a memóriában
A C fordító a változódeklarációkat összegyűjti, és a változókat elhelyezi a memóriában, folytonosan.
Ez persze csak a függvényeken kívül deklarált, ún. globális változókra igaz. A függvények belsejében deklarált (nem static) változók csak akkor kerülnek be a memóriába, amikor maga a függvény elindul (futás közben).
A változókat a memóriában nem folytonos, hézagmentes területen helyezi el a C fordító. Ennek oka, hogy a 32 bites processzor leggyorsabban a 4 B-os határon elhelyezkedő (és át nem lógó) memóriaterülettel képes dolgozni.
Vagyis 2 char típusú változó elhelyezésekor például a fordító elhelyezi az egyik char-t (1 B), majd kihagy 3 B-ot a memórában, hogy a második char is a 4 B-os határ elején legyen.
Ez a pazarló memória kiosztás optimális futási sebességet okoz, de sok memóriát köt le.
A változó deklaráció során elsősorban meg kell adni a változó nevét és típusát:
int a;
unsigned char c;
Több, ugyanolyan típusú változó deklarálása egyszerre is lehetséges:
int a,b;
Van lehetőség az értékadással egyszerre kezdőérték beállítására is:
int a = 10;
Ez azonban csak az adott változóra vonatkozik, a többi, vele egyszerre deklaráltakra nem:
int a=10, b;
int b, a=10;
A hatáskör azt a programszakaszt azonosítja, ahol egy azonosító felhasználható. A változók esetében azt a programszakaszt (azokat a sorokat), ahol a változó neve használható.
A hatáskör ellenőrzése a fordítóprogram feladata. Tilos felhasználni egy azonosítót a hatáskörén kívül.
A C nyelvben kétfajta hatáskör létezik:
Függvényen belül deklarált változó csak a függvény belsejében hivatkozható.
Függvényeken kívül deklarált változó az adott programsortól a modul végéig mindenütt, a függvények belsejében is hivatkozható.
Az élettartam azt befolyásolja, hogy egy változó mely időpontban kerül be a memóriába (foglalja a tárhelyet), majd mikor kerül ki onnan.
A memóriafoglalás optimalizálása miatt a változók élettartamát a lehető legrövidebbre kell szorítani, mivel a felszabaduló memóriaterületeken ekkor másik változók helyezhetők el (újrahasznosítás).
A statikus élettartam azt jelöli, hogy az adott változó a memóriába már a program indulásakor bekerül, és a program futási ideje alatt végig ugyanott marad. A program futásának befejezésekor minden memóriaterület automatikusan felszabadul, beleértve a statikus élettartamú változók számára lefoglalt területet is.
A dinamikus élettartam azt jelenti, hogy a változó a memóriába a program indulása után, egy későbbi időpontban kerül be, és a program befejezése előtt már korábban ki is kerül.
Egy dinamikus változó a program futása során többször is bekerülhet, és eltávozhat onnan. Fontos azt tudni, hogy egy újra bekerült változó már nem feltétlenül ugyanarra a helyre kerül vissza, így nincs arra semmi garancia, hogy a korábbi létezése során a benne elhelyezett értéket a további létezésekor meg is találjuk benne.