
Wo eine Variable lebt, bestimmt wo sie sichtbar ist. Lokale Variablen leben nur in ihrer Funktion. Globale Variablen sind überall sichtbar – aber das ist oft kein Vorteil! 🗺️
🏠 Lokale Variablen – leben in ihrer Funktion
Lokale Variablen werden innerhalb einer Funktion deklariert. Sie existieren nur während der Funktionsausführung und sind danach weg:
🌍 Globale Variablen – überall sichtbar
Globale Variablen werden außerhalb aller Funktionen deklariert. Alle Funktionen können sie lesen und verändern:
#include <stdio.h> int zaehler = 0; // GLOBALE Variable – alle Funktionen sehen sie void erhoehe() { zaehler++; // globale Variable ändern } void zeige() { printf("Zähler: %d\n", zaehler); // globale Variable lesen } int main() { erhoehe(); erhoehe(); erhoehe(); zeige(); // Ausgabe: Zähler: 3 return 0; }
⚖️ Lokal vs. Global – Vergleich
| Eigenschaft | Lokal | Global |
|---|---|---|
| Wo deklariert? | Innerhalb einer Funktion | Außerhalb aller Funktionen |
| Wo sichtbar? | Nur in dieser Funktion | In allen Funktionen |
| Lebensdauer | Während Funktionsausführung | Gesamte Programmlaufzeit |
| Empfehlung | ✅ Bevorzugen! | ⚠️ Nur wenn nötig |
⚠️ Warum globale Variablen vermeiden?
- Jede Funktion kann sie verändern → schwer zu debuggen
- Bei großen Programmen verliert man den Überblick
- Funktionen werden von globalen Variablen abhängig → schwer zu testen
- Zufällige Überschreibungen sind möglich
Faustregel: Verwende globale Variablen nur für echte Programmkonstanten (z.B. const int MAX = 100;).
🎭 Shadowing – Variablen gleichen Namens
int x = 100; // globales x void test() { int x = 42; // lokales x – überschattet das globale! printf("%d\n", x); // gibt 42 aus, nicht 100! } int main() { printf("%d\n", x); // gibt 100 aus test(); printf("%d\n", x); // gibt wieder 100 aus return 0; }
42
100
✏️ Übungen
Lokal oder Global?
Klassifiziere jede Variable als lokal oder global und erkläre den Gültigkeitsbereich:
int punkte = 0; // A
void ergebnis() {
float schnitt = 2.5; // B
punkte += 10;
}
int main() {
int runde = 1; // C
}
A (punkte):
B (schnitt):
C (runde):
Ausgabe nachverfolgen
Was gibt dieses Programm aus?
int wert = 10;
void verdoppele() { wert = wert * 2; }
void zeige() { printf("%d\n", wert); }
int main() {
zeige();
verdoppele();
zeige();
verdoppele();
zeige();
return 0;
}
Ausgabe:
Global → Lokal umschreiben
Schreibe diesen Code mit globaler Variable so um, dass die Variable lokal in main() ist und als Parameter übergeben wird:
int ergebnis = 0;
void addiere(int a, int b) { ergebnis = a + b; }
int main() { addiere(5, 3); printf("%d\n", ergebnis); }
Statischer Zähler
Eine static-Variable in einer Funktion behält ihren Wert zwischen Aufrufen. Schreibe eine Funktion zaehle_aufrufe() und beobachte das Verhalten: