Die letzte Woche hatten wir uns mit dem Thema Zeiger beschäftigt und da wollte ich nochmal
so auf die ganz wesentlichen Sachen eingehen, weil es ja doch das zentrale Thema eigentlich
von der Einführung ins Ziel ist.
Also nochmal kurz zusammengefasst, Zeiger sind Referenzen auf irgendwelche Datenobjekte.
Letztendlich, wenn man sich so rein von der Implementierung her betrachtet, sind es ganz
normale Variablen, aber in diesen Variablen stehen nicht normale Werte, mit denen man
halt rechnet oder so, sondern in diesen Variablen stehen die Adressen von irgendwelchen anderen
Variablen oder Strukturen oder irgend so etwas.
Und ich hatte ja dann mal so ein Beispiel gezeigt, dann ein Stückchen Programmcode,
das ist wirklich eine echte, einfach die Hauptspeicheradresse und je nach Architektur ist das halt ein 32- oder
64-Bit-Wert oder auch ein 16-Bit-Wert, natürlich bei irgendwelchen Mikrocontrollern, auch heutzutage
noch, in dem einfach eine Adresse auf dem Speicher steht und an dieser Adresse steht
dann irgendetwas anderes.
So, das ist also die wesentliche Geschichte, wie ein Zeiger implementiert ist.
Was man damit machen kann, ist, im Wesentlichen sind es zwei Dinge.
Mit dem Unteroperator kriegt man überhaupt erst mal die Adresse von irgendeinem Objekt
raus, also wenn ich irgendeine Variable namens x habe, dann kann ich mit und x rausbekommen,
an welcher Stelle die im Speicher liegt und mit dem Sternoperator kann ich dieser Variable
nachlaufen, diesem Zeiger nachlaufen und bekomme die Speicherzelle, auf die der Zeiger zeigt.
Und dann kommt es darauf an, ob dieses Stern x links oder rechts vor einer Zuweisung steht,
wenn es rechts davon steht, dann ist das Ergebnis von diesem Stern x einfach der Inhalt, der
Speicherzelle, auf die dieses x zeigt und wenn es auf der linken Seite vom Zuweisungszeichen
steht, dann wird in diese Speicherzelle, auf die dieser Zeiger zeigt, was reingeschrieben.
Und dann hatte ich nochmal darauf hingewiesen, ein ganz wichtiger Unterschied, den man beachten
muss, ob dieser Sternchenoperator eben im Zusammenhang mit, im Kontext von einer, einer
variablen Definition auftaucht, sowas wie hier dieses integer Stern ip oder ob er in
einer Zuweisung auftaucht, also wenn man es hier nochmal nimmt, das hier oder das hier.
Das, dieser Sternchenoperator hat, ist hier ein wirklicher Operator in einem Ausdruck
und hier ist das Sternchen letztendlich Bestandteil der Typbeschreibung in einer variablen Definition.
Und das sind halt zwei verschiedene Sachen.
Man erlebt es ja an vielen Stellen, dass eben das gleiche Symbol in einem unterschiedlichen
Kontext verschiedene Sachen bedeutet, ja.
Auch wenn man zum Beispiel an das Minuszeichen und das Größerzeichen denkt.
Das Minuszeichen wird im Rahmen von einer Subtraktion verwendet, das Größerzeichen
wird im Rahmen von Ausdrücken, also Vergleichen verwendet und im Rahmen von Struktur zu griffen,
über Zeige auf Strukturen, hat man ja auch dieses p minus Größer, was weiß ich, Name
oder sowas, wo das hier im Endeffekt quasi diese beiden Symbole zusammen, einen Operator
bilden, nämlich den Operator, der den pointert, der referenziert, einerseits und andererseits
dann die entsprechende Strukturkomponente adressiert.
Also insofern ist das eigentlich gar nichts besonders, dass das gleiche Symbol in unterschiedlichem
Kontext verwendet wird.
Bloß gerade bei den Pointern habe ich die Erfahrung gemacht, dass gerade am Anfang
viele Leute da durchaus verwirrt sind, sowas und sowas hier voneinander zu unterscheiden.
Und ich hatte dann das letzte Mal dieses Beispiel durchgemacht, diese Swap-Funktion,
die jetzt hier nochmal kurz kondensiert, mache ich das nochmal.
Also wir haben die Swap-Funktion mit den zwei Integer-Sternparameter, also zwei Pointern
auf Integer als Parameter, die wir hier in den formalen Parametern px und py nennen.
Und wenn wir die Swap-Funktion aufrufen, dann müssen wir zwei Pointer übergeben.
Wir möchten die Variablen a und b vertauschen lassen, d.h. wir müssen die Adressen der
Variablen a und b ermitteln, um Zeige auf Integer zu bekommen, deswegen hier eben die
Presenters
Zugänglich über
Offener Zugang
Dauer
01:27:03 Min
Aufnahmedatum
2012-10-29
Hochgeladen am
2012-11-14 14:11:08
Sprache
de-DE