Als ich angefangen habe zu programmieren, war einer der Begriffe, die mir besonders unverständlich erschienen, das Konzept der Pointer.
Inzwischen habe ich längst verinnerlicht, was es mit Pointern auf sich hat, und ich werde mich bemühen, das allgemeinverständlich zu erklären.
Ein Pointer ist die Adresse eines Speicherbereiches, auf dem bestimmte Daten gespeichert sind.
Häh ..?
In den Programmiersprachen kann man benötigte Werte in Variablen abspeichern. Wir haben also z.B. eine Variable $X, der wir den Wert 42 zugewiesen haben. Das heißt, irgendwo im Arbeitsspeicher steht 2A000000 (32bit, Hex, Intel Byte-Reihenfolge). Das Computerprogramm muss sich nun den Ort (also die Adresse) merken, wo diese 42 steht. Einerseits kann man über die Variable $X darauf zugreifen. Andererseits ist das aber auch möglich mit einem Pointer. Dies ist ebenfalls eine Variable vom Typ Pointer.
Der ursprüngliche Wert war eine (vorzeichenlose) Ganzzahl. Wenn wir einen Pointer darauf zeigen lassen, so können wir den Wert beispielsweise auch als Zeichen(kette) interpretieren, und erhalten in diesem Fall ein Sternchen*.
Mit einem 32-bit-Pointer lassen sich 4 Gigabyte Speicherbereich addressieren, mit 64bit entsprechend das Quadrat davon.
Pointer lassen sich inkrementieren und dekrementieren. Je nach dem Typ der Variable, auf den sie zeigen, bedeutet das, dass die jeweilige Speicheradresse um die entsprechende Anzahl Bytes erhöht oder erniedrigt wird.
Oops, das ist jetzt vielleicht doch nicht ganz so verständlich geworden. Versuchen wir einen anderen Ansatz.
Ich schreibe von mir nicht immer in der ersten Person, sondern objektifiziere mich etwa als Programmierschlampe oder Chefin.
Oder als anderes Beispiel nenne ich Carsten je nach Kontext auch „Herr Klugsch“, „der Chef“, „der Geschäftsführer“ oder „mein Mann“. All diese Bezeichnungen meinen aber dieselbe Person. Sie stellen nur eine Referenz dar auf ein und dasselbe Objekt.
Beim Programmieren nutzt man dazu (Objekt-)Pointer, die auf die jeweilige Objektinstanz zeigen und verweisen. Eine Instanz im Arbeitsspeicher kann durch mehrere Pointer referenziert werden.
Und das ist eigentlich schon alles, was man über Pointer zu wissen braucht.
Eigentlich ist die ganze Pointerei ganz einfach, wenn man sie einmal verstanden hat. Allerdings hatte ich in der Ausbildung den Eindruck, dass die Dozenten, die sie vermitteln sollten, sie eben nicht verstanden hatten und so alle von der Komplexität der Materie überzeugt wurden. In der beruflichen Praxis erwies es sich dann als ziemlich einfach. Komplex wird es höchstes bei Pointern auf Pointer (nötig in c, wenn der Pointer in einer Unterfunktion verändert werden soll) oder bei Mehrfach-Pointern…
LikeGefällt 1 Person
Ja, das sehe ich auch so.
Pointer erscheinen in der Theorie erst mal nur verwirrend. Aber wenn man sie dann als Learning-by-Doing praktisch umsetzt, wird das Thema sehr viel klarer.
LikeLike
DANKE 🙂
LikeGefällt 1 Person
You’re welcome.
LikeGefällt 1 Person
Ich habe es verstanden! Ich bin bloss ein Objekt mit vielen Namen.
LikeGefällt 3 Personen
Exakt so kann man es ausdrücken.
Oder auch anders.
LikeGefällt 1 Person
So easy.
LikeLike
Sobald man’s verstanden hat.
LikeLike
Die erste Variante ist besser 🙂
LikeLike
Wie es dir gefällt.
LikeLike
😉
LikeLike
Pointer sind letztlich auch nur sowas wie Hardlinks im Dateisystem. Wie man die Daten „hinter“ dem Pointer (bzw. dem Namen) interpretiert ist ja ohnehin Problem des Programms, das darauf zugreifen will (und ggf. des Betriebssystems, wegen Zugriffsrechten, falls man mehr auslesen will als man darf)
LikeGefällt 1 Person
Das stimmt.
Und es ist die Aufgabe des Programmierers, immer zu wissen, welche Art von Daten genau hinter einem Pointer steht.
LikeLike
Pingback: Le sacre du Twitter //2169 | breakpoint
Pingback: Anne Nühm and the Half-Blood Record //2396 | breakpoint