Pointer

Aus dev.kaibel.net
Version vom 17. Oktober 2025, 15:13 Uhr von PhilKa (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Pointer (C) = Ein '''Pointer''' (deutsch: *Zeiger*) ist ein spezieller Variablentyp in der Programmiersprache C, der nicht direkt einen Wert, sondern die '''Speicheradresse''' einer anderen Variablen speichert. Pointer sind ein zentrales Konzept in C, da sie direkten Zugriff auf den Speicher ermöglichen und in vielen Bereichen wie Arrays, Funktionen, dynamischer Speicherverwaltung und Strukturen verwendet werden. == Grundprinzip == Jede Variable in…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Pointer (C)

Ein Pointer (deutsch: *Zeiger*) ist ein spezieller Variablentyp in der Programmiersprache C, der nicht direkt einen Wert, sondern die Speicheradresse einer anderen Variablen speichert. Pointer sind ein zentrales Konzept in C, da sie direkten Zugriff auf den Speicher ermöglichen und in vielen Bereichen wie Arrays, Funktionen, dynamischer Speicherverwaltung und Strukturen verwendet werden.

Grundprinzip

Jede Variable in C wird im Speicher abgelegt. Ein Pointer enthält die Adresse dieses Speicherorts.

Beispiel:

int a = 5;
int* p = &a;
  • a ist eine normale Variable vom Typ int mit dem Wert 5
  • &a ist die Speicheradresse von a
  • p ist ein Pointer, der auf a zeigt

Deklaration

Die Syntax zur Deklaration eines Pointers lautet:

Datentyp* pointer_name;

Beispiele:

int* p;       // Zeiger auf int
char* c;      // Zeiger auf char
float* f;     // Zeiger auf float

Operatoren

C stellt zwei spezielle Operatoren für Pointer bereit:

  • & (Adressoperator)
 Liefert die Adresse einer Variablen.  
 Beispiel:  
  int a = 10;
  int* p = &a; // p erhält die Adresse von a
  • * (Dereferenzierungsoperator)
 Greift auf den Wert zu, auf den der Zeiger zeigt.  
 Beispiel:  
  printf("%d", *p); // gibt den Wert 10 aus

Beispielprogramm

#include <stdio.h>

int main() {
    int x = 42;
    int* ptr = &x;

    printf("Wert von x: %d\n", x);
    printf("Adresse von x: %p\n", (void*)&x);
    printf("Wert von ptr: %p\n", (void*)ptr);
    printf("Wert auf den ptr zeigt: %d\n", *ptr);

    return 0;
}

Mögliche Ausgabe:

Wert von x: 42
Adresse von x: 0x7ffee4d1b8ac
Wert von ptr: 0x7ffee4d1b8ac
Wert auf den ptr zeigt: 42

Pointer und Arrays

In C sind Arrays und Pointer eng miteinander verbunden. Der Name eines Arrays entspricht der Adresse seines ersten Elements:

int arr[3] = {1, 2, 3};
int* p = arr;

printf("%d\n", *p);     // 1
printf("%d\n", *(p+1)); // 2
printf("%d\n", *(p+2)); // 3

Pointer und Funktionen

Pointer können als Funktionsparameter verwendet werden, um auf Werte außerhalb der Funktion zuzugreifen oder sie zu verändern (Call by Reference).

Beispiel:

#include <stdio.h>

void verdoppeln(int* zahl) {
    *zahl = *zahl * 2;
}

int main() {
    int x = 10;
    verdoppeln(&x);
    printf("x = %d\n", x); // Ausgabe: 20
    return 0;
}

Null-Pointer

Ein Pointer, der auf keine gültige Adresse zeigt, wird als Null-Pointer bezeichnet. Er wird mit dem Makro NULL aus der Header-Datei `<stddef.h>` oder `<stdio.h>` dargestellt.

int* p = NULL;
if (p == NULL) {
    printf("Pointer zeigt auf nichts.\n");
}

Pointer-Arithmetik

Pointer können um ganze Zahlen verschoben werden. Dabei wird die Adresse um die Größe des Datentyps verändert, auf den sie zeigen.

Beispiel:

int arr[3] = {10, 20, 30};
int* p = arr;
p++; // zeigt jetzt auf arr[1]
printf("%d\n", *p); // Ausgabe: 20

Wichtige Hinweise

  • Falsche oder uninitialisierte Pointer können zu Abstürzen (Segmentation Fault) führen.
  • Speicher, der mit malloc() angefordert wird, muss mit free() wieder freigegeben werden.
  • Pointer sollten immer entweder auf gültige Adressen oder auf NULL zeigen.

Siehe auch

Quellen

  • ISO/IEC 9899:2018 (C18) – Programming Language C
  • Kernighan, Brian W.; Ritchie, Dennis M.: The C Programming Language. Prentice Hall, 1988.
  • GNU C Library Documentation