C-ben a változók hatóköre alatt azt a kódrészletet értjük, amelyben az adott változó elérhető, használható. Ez a hatókör attól függ, hol definiáljuk az adott változót. Ennek függvényében 3 változótípust különböztethetünk meg:
- helyi változók: egy adott függvényen vagy kódblokkon belül definiált változók
- paraméterek: egy függvény paraméterlistájában meghatározott változók
- globális változók: minden függvényen kívül megadott változó
Helyi változók
Más néven lokális változók. Egy függvényen vagy kódblokkon belül definiáljuk, elérhetősége is ezen kódrészletre korlátozódik. Amint a program futása túlhalad ezen a kódrészleten, a változó többé már nem elérhető, az általa felhasznált memóriaterület felszabadul. Az így deklarált változók prioritása a legmagasabb. Ha létezik már azonos nevű változó, amit „kijjebb”, magasabb szinten hoztunk létre, az az új létezése alatt a kódból elérhetetlen lesz, az új képletesen fogalmazva kitakarja azt. Fontos, hogy ettől a korábbi változó nem szűnik meg és értéke sem változik! Az adott függvényt / kódrészletet elhagyva a magasabb szinten deklarált változó újra elérhető lesz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> // Itt még nem létezik a változó int main() { // Változó deklarálása int szam; // Változó inicializálása (kezdőérték adás) szam = 10; // A függvényen belül vagyunk, használhatjuk szam = szam + 3; printf ("%d\n", szam); return 0; } // Itt már nem létezik a változó |
Paraméterek
A függvényen belül mindenhol elérhető, hacsak a fentebb említett módon egy azonos nevű helyi változó el nem fedi. A függvényen kívül nem létezik, nem elérhető. A paraméter számára memóriaterület a függvény meghívásakor foglalódik és a függvény befejeződésekor felszabadul, tartalma elveszik.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> // Paraméter deklarálása void minta (int param) { printf ("Parameter: %d\n", param); } int main() { // Itt még nem létezik a paraméter // Paraméter inicializálása (kezdőérték adás) minta (10); // Itt már nem létezik a paraméter return 0; } |
Globális változók
Minden függvényen és kódblokkon kívül kerülnek definiálásra és a program futása alatt végig, mindenhol elérhetőek. Természetesen a korábbiakban említetteknek megfelelően időnként más, helyi változók vagy paraméterek kitakarhatják, maszkolhatják őket. Jellemzően a program elején szokták definiálni a globális változókat. Ma már erősen ellenjavallt használatuk, tulajdonképpen programozástechnikai hibaként kezelendő és megfelelő tervezéssel használatuk elkerülhető.1-200 sornál hosszabb kód esetén már nehezen kezelhetővé válik és nagyon időigényesen tárhatók csak fel a globális változók használatából eredő hibák.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> // Változó deklarálása int globalis; void minta() { // Függvényen belül is elérhető printf ("%d\n", globalis); // És módosítható is globalis += 4; } int main() { // Már itt is létezik a globális változó // Változó inicializálása (kezdőérték adás) globalis = 10; minta(); printf ("%d\n", globalis); return 0; } |