
In C sind Arrays und Pointer eng verwandt – der Array-Name ist bereits ein Pointer auf das erste Element! Das erklärt warum du Arrays ohne & übergibst. Und mit Pointer-Arithmetik kannst du durch Arrays navigieren! 🧭
🔗 Array-Name ist ein Pointer
Der Name eines Arrays ist automatisch ein Pointer auf das erste Element (Index 0):
int arr[] = {10, 20, 30, 40}; int *p = arr; // p zeigt auf arr[0] printf("%d\n", arr[0]); // 10 printf("%d\n", *arr); // 10 – gleich! printf("%d\n", *p); // 10 /* Äquivalente Zugriffe: */ printf("%d\n", arr[2]); // 30 printf("%d\n", *(arr+2)); // 30 – gleich!
➕ Pointer-Arithmetik
p + 1 zeigt nicht auf die nächste Speicherzelle, sondern auf das nächste Element des Typs (bei int: +4 Bytes):
💡 arr[i] vs *(arr+i)
Beide Schreibweisen sind identisch!
arr[i] ist genau dasselbe wie *(arr + i). Der Compiler übersetzt beide gleich. arr[i] ist die lesbarere Form – bevorzuge sie in normalem Code.
📝 Pointer auf Strings
char *name = "Oemer"; // Pointer auf String-Literal (read-only!) printf("%s\n", name); // Oemer printf("%c\n", *name); // O (erstes Zeichen) /* Bessere Alternative für veränderbare Strings: */ char buf[20] = "Oemer"; // Array = veränderbar!
✏️ Übungen
Äquivalenz prüfen
Gegeben: int a[] = {5, 10, 15, 20}; int *p = a;
Welchen Wert haben folgende Ausdrücke?
*p= _______*(p+2)= _______a[3]= _______*(a+1)= _______
Array mit Pointer durchlaufen
Schreibe eine Funktion, die ein Array mit Pointer-Arithmetik (nicht mit arr[i]) durchläuft und die Summe berechnet:
Array mit Pointer-Arithmetik umkehren
Kehre ein Array in-place um – ohne ein zweites Array zu brauchen. Nutze zwei Pointer: einen vom Anfang, einen vom Ende, und bewege sie aufeinander zu: