Ein Zeiger ist ein Verweis auf den Wert, mit dem die Variable belegt ist. So zeigt er eigentlich nicht direkt auf die Variable, sondern eben nur auf ihren Wert.

Eine Variable, deren Wert wechselt muß demnach nicht immer neu deklariert werden, sondern bekommt neue Werte zugewiesen. Damit diese Variable wechselnde Werte haben kann, muß sie als "aufnahmefähig für einen bestimmten Typ" deklariert sein und das mit new Datentyp sowieso

Achten Sie also darauf, die Variable ( lat. variare = wechseln ) eindeutig zu deklarieren. Andernfalls wird der Code zwar problemlos kompiliert aber das Programm stürzt ab! Es ist auch ratsam, mittels delete die vorige Variable zu löschen und mit 0 zu initialisieren wie im vierten Beispiel.

Zeiger sind dem Adressoperator sehr ähnlich und so findet dieser hier auch gleich seinen Platz. Seien Sie ruhig penibel bei der Definition. Sobald Sie mit Adressen hantieren, ist das Programm absturzgefährdet.

Container  |  Arrays

     

Wenn Sie zwei Vornamen haben, ist das nichts Besonderes. Wenn Sie zwei gleichlautende Vornamen haben könnten, würden diese von Ihren Zeitgenossen nach anfänglichem Gelächter sofort zu einem einzigen Vornamen verschmolzen.

So auch in diesem Skript. Zwar völlig humorlos aber mit demselben Effekt. Sobald also Ihre Vornamen als identisch eingegeben werden, ist die Ausgabe eben nur ein Wert.

JavaScript hat nicht diese Nähe zur Maschine wie C++ und daher konnte ich im Skript die Vorgehensweise der Zeiger nur imitieren.

Es läuft mit Zeigern aber darauf hinaus, im Falle einer Gleichheit der Werte den überflüssigen Wert nicht kritiklos aufzunehmen, sondern zu löschen und neu zu belegen. Problemlos möglich, wenn man Pointer verwendet und bei vielen Werten sehr lohnend.

Der muntere Wechsel der Werte wird in diesem Quellcode nochmal schön deutlich. Besonders, weil ich hier eine Konstante eingeschlichen habe.
Da der Name der Variablen gleich bleibt, ist nur der Wert variant. Vielleicht schaffen Sie zur Übung mal eine Architektur, die im Falle der Gleichheit entsprechende Meldung ausgibt?

Programmarchitektur  |  Lösungsvorschlag

Hört man von Zeigern, dann denkt man sofort an die Adresse eines Zeichens in der ASCII Tabelle. Der this pointer zeigt auch auf eine Adresse, allerdings auf die des Objekts im Kontext des Aufrufs oder besser der Methode.

Er zeigt somit nicht auf das Zeichen selbst, sondern im Falle unseres Beispiels auf die Multiplikation im Kontext der Klasse.

Somit gilt der this pointer für Memberfunktionen. So bekommen nicht nur Zeichen eine Adresse, sondern auch Funktionen.

2. Quellcode: Zeichen und ASCII Tabelle

Hier nocheinmal der Unterschied zwischen Adresse und Wert. Der Pointer zeigt auf die oben definierten Konstanten und gibt diese unter Beachtung der Grösse auch korrekt aus.

Ohne diesen Pointer erscheint die Adresse der Maschine, wofür hier allerdings die Bibliothek algorithm zuständig ist. Diese übernimmt Aufgaben des Zählens, Sortierens, des Suchens und Modifizierens.

Algorithmisch

± Zahl ± Zahl ± Zahl
0
In Anlehnung an obigen Quellcode hier ein kleines Skript, das immer die grösste Zahl anzeigt...
Probieren Sie auch wechselweise Eingaben und negative Zahlen.

JavaDome: Minimum und Maximum zählen

Der Arrow ist noch kein Lambda. Er verweist nach dem Pointer, der auf das Objekt zeigt, auf Attribute oder Hintergrundinfos eines Objekts. Somit zeigt er an, was dem Pointer entgeht, sofern Hintegrundinfos existieren oder hinterlegt wurden.

Das macht ihn zwar sehr optional, stellt aber dennoch eine prima Ergänzung zum Pointer dar, der ja primär das Objekt und weniger die Eigenschaften abfragt.

Was keinen Raum einnimmt, existiert nicht! Jedenfalls nicht physikalisch. Und sobald Sie ein Objekt erzeugen - auch ein Zeiger ist ein Objekt - wird diesem Objekt Speicher zugeteilt. Wenn Sie dieses Objekt wieder löschen, entsteht natürlich auch wieder freier Speicherplatz.

Das Thema Speicher ist also schon ziemlich maschinennah und bis zu einem gewissen praktischen Grade denkt man beim Programmieren gar nicht weiter darüber nach. Hier werden die Themen Speicher und mehrdimensionales Array kombiniert und es entstehen recht gründliche Programme.

Im Beispiel werden drei Zeiger verschiedenen Datentyps angelegt; so wie man es mit Variablen kennt. Diese Zeiger erzeugen Objekte und zwar mit new und Datentyp.

Da der Typ der Objekte klar ist, kann auch Speicher zugeteilt werden und das geschieht ebenfalls mit new Es werden dann immer nur die Zeiger auf die Variable mit einem Wert belegt.

Datentypen

Wenn Sie eine ganze Liste von Eingaben machen, dann will man wohl nicht für jeden Eintrag eine Variable anlegen. Es bietet sich an, jeweils ein neues Objekt zu erzeugen. Dieses Objekt ist hier ebenfalls ein Pointer. Praktisch, denn es geht uns immer nur um den Wert des Eintrags.

Damit auch alle Einträge bestimmter Anzahl aufgenommen werden, braucht man eine for Schleife und man braucht wieder eine, um alle Einträge auszugeben.

Alles muss raus mit struct und record   JavaDome: new int

Stellt man sich ein Koordinatensystem vor, dann wird der Begriff der Zweidimensionalität gleich mal deutlich. Bezogen auf ein Array ist das so ähnlich, birgt aber noch mehr Möglichkeiten, das es sich nicht zwangsläufig um Koordinaten handeln muss, sondern allgemein um Kombinationen.

Es ist nötig, die Variablen konstant zu deklarieren, weil diese feststehen müssen. Beweglichkeit hierzu gäbe es nur mit Zeigern.

Sehr wichtig: int addi [ reih ][ spal ] = { 0 } als Deklration beginnend bei 0

Dann die zwei Programmteile. Ein Teil rechnet, der andere gibt aus und in jedem dieser Programmteile wird zweimal gezählt: einmal die Reihenteile und einmal die Spaltenteile also die Elemente darin.

Damit Belegungen vorgenommen werden können und die Variablen eben nicht konstant deklariert werden müssen, sind Zeiger nötig. Hier ist aber ein Zeiger auf einen Zeiger anzuwenden, da die Koordinaten - die Variable koor - aus x- und y-Werten bestehen.

Dann wird, wie oben erwähnt, wieder zweimal gezählt: Reihenteile und Spaltenteile. Beim Löschen können nur die Elemente der Zeile gelöscht werden, weil hier die Spaltenelemente quasi mit dranhängen; eben durch den doppelten Pointer.

Arrays

Startseite  |  Hinweise und Impressum  |  Facebook  |  Twitter  |  Google plus