Deutsche Lernausgabe
Zeiger in C
Lernen Sie Adressen, Dereferenzierung, Grenzen und Objektlebenszeiten kennen.

Ein Zeiger enthält eine einem Typ zugeordnete Adresse. & ermittelt die Objektadresse, * greift auf das referenzierte Objekt zu. Stellen Sie vor jeder Dereferenzierung sicher, dass das Objekt existiert und Typ sowie Lebenszeit passen.
Zeigerarithmetik bewegt sich in Einheiten des referenzierten Typs. Ein Zeiger auf die Position unmittelbar nach einem Array darf gebildet, aber nicht dereferenziert werden. Subtraktion und Ordnungsvergleiche müssen die Regeln für dasselbe Array beachten.
Die Übergabe eines Zeigers kopiert seinen Wert. Über die Kopie lässt sich das Objekt ändern, doch eine Änderung der Kopie verändert nicht den Zeiger des Aufrufers. Geben Sie einen neuen Zeiger zurück oder übergeben Sie einen Zeiger auf einen Zeiger.
Initialisieren Sie Zeiger, prüfen Sie Reservierungen und greifen Sie nie nach free zu. Eine Zeichnung aus Objekten und Pfeilen hilft beim Verständnis von Listen und Zeigerarrays.
Quellcode
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(void) {
int score = 95;
int *ptr = &score;
printf("Value via ptr : %d\n", *ptr);
*ptr = 100;
printf("Updated score : %d\n", score);
int nums[4] = {10, 20, 30, 40};
int *p = nums;
for (int i = 0; i < 4; i++) {
printf("*(p + %d) = %d\n", i, *(p + i));
}
printf("Bytes between p and p + 1: %zu\n",
(size_t)((char *)(p + 1) - (char *)p));
int x = 1, y = 2;
swap(&x, &y);
printf("After swap: x = %d, y = %d\n", x, y);
int *heap = malloc(3 * sizeof(int));
if (heap == NULL) {
return 1;
}
for (int i = 0; i < 3; i++) {
heap[i] = (i + 1) * 5;
}
printf("Heap values: %d %d %d\n", heap[0], heap[1], heap[2]);
free(heap);
heap = NULL;
printf("heap is %s after free\n", heap == NULL ? "NULL" : "not NULL");
return 0;
}
Im Compiler öffnenErwartetes Ergebnis
Value via ptr : 95 Updated score : 100 *(p + 0) = 10 *(p + 1) = 20 *(p + 2) = 30 *(p + 3) = 40 Bytes between p and p + 1: 4 After swap: x = 2, y = 1 Heap values: 5 10 15 heap is NULL after free
Häufige Fragen
Warum bleiben Code und manche Ausgaben englisch?
C-Schlüsselwörter, Bezeichner, Programmkommentare und erwartete Ausgaben bleiben wie im Original, damit der Code ausführbar und die Tests konsistent bleiben. Erklärungen und Aufgabenstellungen sind übersetzt.