Warum braucht man in C++ Zeiger?

Zeiger (auch im Deutschen gerne mit dem englischen Wort "Pointer" bezeichnet) sind ein fundamentales Feature von C++. Das merkt man unter Anderem daran, dass beinahe jedes C++-Anfängerbuch bereits in einem der ersten Kapitel Zeiger behandelt. Häufig handelt es sich dabei um einfache Beispiele, welche auch problemlos ohne Zeiger programmiert werden könnten. Da bleibt die Frage offen, wofür sie denn überhaupt nötig sind.

Zeiger wenn möglich vermeiden

Eines vorweg: Die direkte Verwendung von Zeigern ist gefährlich und kann selbst bei erfahrenen Programmierern gelegentlich zu Fehlern führen. Alleine schon aus diesem Grund solltest du Pointer nur verwenden, wenn es nicht anders geht. Bei Standarddatentypen (Integer, Boolean, Double, ...) wirst du in der Regel keine Zeiger brauchen.

Speicherverwaltung

Zeiger sind nötig um dynamisch allokierten Speicher zu nutzen. Der new-Operator gibt einen entsprechend typisierten Pointer zurück, der auf den neu angelegten Speicherbereich zeigt. Somit sind Zeiger für eine saubere objektorientierte Programmierung unabdingbar. Das ist allerdings ein Kapitel, das für Anfäger doch noch eher ungeeignet ist und anfangs getrost beiseite geschoben werden kann.

Zeiger und Polymorphismus

Polymorphismus ("Vielgestaltigkeit") funktioniert in C++ nur mit Zeigern oder Referenzen. Es geht im Prinzip darum, dass sich hinter einem Zeiger einer Basisklasse ein Objekt einer spezielleren (abgeleiteten) Klasse verbergen kann. Hierbei handelt es sich ebenfalls um sehr fortgeschrittene Techniken, die das Verständnis von Klassen, Objekten und Vererbung voraussetzen.

// Create a new object on the heap and retrieve pointer to it
CExampleClassBase* myObject = new CExampleClassDerived();

// Use '->'-operator for function calls through pointer
myObject->Print();

// Free memory
delete myObject;
myObject = NULL; // NULL maybe replaced by 'nullptr' since C++11

Obiger Codeausschnitt demonstriert wie ein neues Objekt mit dem new-Operator erzeugt wird. Ergebnis ist ein Pointer, der myObject zugewiesen wird. Das funktioniert in C++ ausschließlich mit Zeigern. Beachte, dass sich der Zeiger auf die Basisklasse bezieht, tatsächlich steht dahinter aber noch immer die abgeleitete Version (CExampleClassDerived) mit allen seinen Eigenschaften. Dieser Polymorphismus ist, wie bereits erwähnt, nur mit Zeigern oder Referenzen möglich. Natürlich muss an geeigneter Stelle der auf dem Heap angelegte Speicher auch mit einem delete wieder freigegeben werden, da wir ansonsten ein Speicherleck (Memory Leak) produziert hätten. Der Zeiger wird anschließend auf NULL gesetzt (ab C++11 kann nullptr verwendet werden), damit nicht mehr versehentlich auf den Speicher zugegriffen wird.

Fazit

Zeiger sind ein grundlegender Bestandteil von C++ und demnach für eine ernsthafte Programmierung unbedingt erforderlich, speziell wenn du C++ auch tatsächlich objektorientiert verwendest (was du auch tun solltest).

Verstehst du die Anwendung eines Zeigers in einem konkreten Codeausschnitt nicht? Kein Problem, schicke uns ein Mail mit dem relevaten Code und deiner dazugehörigen Frage. Wir helfen dir weiter!

Do you speak English?

Programmieren zu lernen ist auch ohne Englischkenntnisse möglich.

Abbildung Stack und Heap

Im allgemeinen bezeichnen Stack ("Stapel") und Heap ("Haufen") Datenstrukturen mit ihren ganz speziellen Eigenschaften.

Datentyp Integer

Integer Datentypen gibt es in einigen Varianten. Grundsätzlich ist ein Integer ein ganzzahliger Wert in einem eingeschränkten Wertebereich.

Copyright © 2014 www.lerneprogrammieren.com