breakplaining: Pointer //1971

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.

Über Anne Nühm (breakpoint)

Die Programmierschlampe.
Dieser Beitrag wurde unter Uncategorized abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

14 Antworten zu breakplaining: Pointer //1971

  1. claudius2016 schreibt:

    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…

    Gefällt 1 Person

  2. transomat schreibt:

    DANKE 🙂

    Gefällt 1 Person

  3. Pendolino70 schreibt:

    Ich habe es verstanden! Ich bin bloss ein Objekt mit vielen Namen.

    Gefällt 3 Personen

  4. Plietsche Jung schreibt:

    Die erste Variante ist besser 🙂

    Liken

  5. Engywuck schreibt:

    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)

    Gefällt 1 Person

  6. Pingback: Le sacre du Twitter //2169 | breakpoint

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.