-
Ritter
Zeiger sind sehr mächtig und ein sehr wichtiges Werkzeug für Programmierer. Da sie allerdings auch sehr gefährlich sind und leicht Speicherlecks verursachen verstecken viele Sprachen die Zeiger vor dem Programmierer, der dann gar nicht merkt, das er im Grunde gerade mit einem Zeiger arbeitet.
Du wirst an vielen Stellen Zeigern begegnen, auch wenn dir das nicht so erscheint.
In C gibt es nicht soviele Beispiele dafür, zwei die mir spontan einfallen sind Strings und Arrays.
In C gibt es keinen eigenen Datentyp für Zeichenketten, C kennt nur den Datentyp Char. Um eine Zeichenkette zu realisieren verwendet man als Programmierer daher häufig einen Char-Pointer/Zeiger oder ein Char-Array. Das Array hat den Nachteil, daß ich genau wissen muss wieviele Zeichen ich in meiner Zeichenkette haben muss um genau soviel Speicher zu reservieren.
Wenn ich diesen String aber zB. nutzen will um eine Eingabe von aussen zu speichern (bspw. einen Befehl von der Kommandozeile) kriege ich damit Probleme. Entweder ich kann den ganzen Befehl nicht speichern oder ich verbrauche mehr Platz als ich eigentlich brauche.
Über einen Char-Pointer kann ich beliebig lange Zeichenketten "in" meiner Variable speichern. Das Ende des Strings wird dabei durch ein 0-Byte dargestellt.
Arrays sind ein weiteres Phänomen, wo im Grund Zeiger verwendet werden, ohne daß man es merkt. Wenn du ein Array von 10.000 Integern anlegst erscheint dir das wie eine Variable, die einen entsprechend großen Block Speicher belegt. Problem dabei ist, daß nicht unbedingt 40k Byte an Speicher an einem Stück gerade frei sind.
Tatsächlich ist deine Array-Variable ein Zeiger vom Typ Integer auf den ersten Wert des Arrays. Wenn du nun auf den i-ten Wert deines Arrays zugreifst wird einfache Zeigerarithmetik angewendet und der Zeiger springt eben um i*4byte weiter. (Sollte diese Speicherstelle aber nicht frei sein und daher nicht zum Array gehören wird der Zeiger vermutlich vom Betriebssystem an die richtige Speicherstelle umgeleitet)
In Objektorientierten Sprachen sind auch Objektvariablen nichts weiter als Zeiger auf die Datenstruktur im Speicher, welche das Objekt darstellt.
Im Grunde genommen läßt sich alles ohne Zeiger theoretisch realisieren, praktisch kannst du mit Zeigern aber Datenstrukturen erstellen die intern einen viel komplexeren Aufbau haben als nur ein einfacher Integer oder Char-wert, von aussen aber wie eine normale Variable behandelt werden können. Wann immer du etwas abspeicherst, was nicht ein Char, ein Integer, ein Float oder ein Bool ist, verwendest du Zeiger.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln