
Pointer sind das mächtigste – und gefährlichste – Konzept in C. Ein Pointer speichert nicht einen Wert, sondern die Adresse einer Variable im Speicher. Damit kannst du Variablen aus jeder Funktion heraus verändern! 🎯
🗺️ Adressen und Pointer
Jede Variable hat eine Adresse im Arbeitsspeicher. Ein Pointer ist eine Variable, die diese Adresse speichert:
*ptr = 42 → Wert an der Adresse (Dereferenzierung)
📝 Pointer-Syntax
#include <stdio.h> int main() { int x = 42; // normale Variable int *ptr = &x; // Pointer auf x (&x = Adresse von x) printf("Wert von x: %d\n", x); // 42 printf("Adresse von x: %p\n", &x); // 0x... (hex) printf("Wert in ptr: %p\n", ptr); // gleiche Adresse printf("*ptr: %d\n", *ptr); // 42 (Dereferenzierung) *ptr = 100; // x wird geändert über Pointer! printf("x nach *ptr=100: %d\n", x); // 100 return 0; }
⚙️ Pointer in Funktionen – call by reference
Mit Pointern kann eine Funktion Variablen des Aufrufers wirklich verändern:
void tausche(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } int main() { int x = 5, y = 9; tausche(&x, &y); // Adressen übergeben! printf("x=%d, y=%d\n", x, y); // x=9, y=5 }
📋 Operator-Übersicht
| Operator | Name | Bedeutung | Beispiel |
|---|---|---|---|
| & | Adressoperator | Gibt die Adresse einer Variable | &x → Adresse von x |
| * (Deklaration) | Pointer-Typ | Deklariert einen Pointer | int *p |
| * (Zugriff) | Dereferenzierung | Wert an der gespeicherten Adresse | *p → Wert von p |
⚠️ Uninitialisierter Pointer = Gefahr!
Ein Pointer ohne Initialisierung zeigt auf eine zufällige Adresse. Zugriff darauf ist undefiniertes Verhalten (Absturz). Immer initialisieren: int *p = NULL; oder int *p = &x;
✏️ Übungen
Pointer lesen
Was gibt dieser Code aus? Erkläre jeden Schritt:
int a = 10;
int *p = &a;
*p = 20;
printf("%d\n", a);
Ausgabe:
Erklärung:
Call by Reference
Schreibe eine Funktion verdoppele(int *n), die den Wert der übergebenen Variable verdoppelt:
Min und Max mit Pointern
Schreibe eine Funktion, die den Minimum- und Maximum-Wert eines Arrays über Pointer zurückgibt:
Swap – zwei Variablen tauschen
Das klassische Pointer-Problem: Schreibe eine Funktion swap(int *a, int *b), die den Inhalt zweier Variablen tauscht. Ohne Pointer wäre das unmöglich!