Pointer
Ein Pointer ist eine Variable, deren Wert eine Speicheradresse ist.
Über einen Pointer kann indirekt auf einen Speicherbereich zugegriffen werden.
Grundoperationen in C
| Ausdruck | Bedeutung |
|---|---|
&x |
Adresse von x |
*p |
Inhalt an der Adresse, auf die p zeigt |
p + n |
Adresse n Elemente weiter, abhängig vom Pointer-Typ |
Beispiel:
int x = 5;
int *p = &x;
*p = 18;
Danach gilt:
x == 18
weil *p = 18 den Speicherinhalt von x verändert.
Wichtig
Ein Pointer selbst ist auch nur eine Variable. Wird der Pointerwert geändert, ändert man nicht automatisch den Inhalt an der ursprünglichen Adresse.
void upgrade(int *p) {
p = 18; // falsch: verändert nur den lokalen Pointerwert
}
Korrekt wäre:
void upgrade(int *p) {
*p = 18; // verändert den Inhalt an der Adresse
}
Typische Fehler
- nicht initialisierten Pointer dereferenzieren
- ungültige Adresse dereferenzieren
- nach
freeweiter auf Speicher zugreifen sizeof(pointer)mitsizeof(*pointer)verwechseln