Architekt hat geschrieben:Ich hab mich das bisher eig. noch nie gefragt, aber: Wieso werden Zeigern eig. mit einem Sternchen gekennzeichnet und mit einem & referenziert? Also wie kam man auf die Idee, genau diese Syntax zu wählen?
Also zum klaren Verständnis, ich meine dies:
int* p = &a;
Ui, was Programmier-Sprachen-Philosophisches
Wirklich richtige Antworten habe ich nicht. Aber ich habe Vermutungen.
Zum Zeiger: Ich glaube nicht, dass mit dem * ein Zeiger gekennzeichnet wird, sondern entsprechend ein "Mehrfaches", vergleichbar mit RegularExpressions bzw. in der Shell: "dir ster*" listet alles auf, wo hinter "ster" noch mehr folgt.
Ein int wird mit "char eins;" definiert und mit "char * viele" wird eine Variable deklariert, die auf viele Daten vom diesem Typ verweist. Die einfachste Möglichkeit das auf der Maschine zu realisieren ist der Zeiger.
So bringe ich in C Tutorien den Leuten Strings bei: char ist ein Buchstabe, char * sind viele Buchstaben. Und später bringe ich den Leuten Zeiger bei mit dem Kommentar, dass Zeiger nicht so kompliziert sind, wie alle immer sagen, weil wir sie schon die ganze Zeit nutzen.
Zum AddressOf-Operator: Eigentlich ist das @-Zeichen ja regelrecht prädestiniert für diese Operation. Wie es heute üblich ist, eine Hex-Zahl mit 0x einzuleiten, war es in den 80ern und frühen Neunzigern, wo ich C selbst noch gar nicht kannte, sondern mit diversen Basic-Dialekten unterwegs war, üblicher das @ Zeichen zu nutzen.
C kommt von 1972 und besitzt sogenannte Digraphen und Trigraphen, um für verschieden Computer Zeichen repräsentieren, die diesen Computern auf der Tastatur fehlen. Dazu gehören zum Beispiel die geschweiften Klammern, die ja
in C sehr wichtig sind, aber eben auf alten Computern überhaupt nicht existieren.
Computer aus den 70ern hatten nunmal keine Standard-PC-Tastatur, der ja erst in den frühen 80ern kam. Da war C schon 10 Jahre alt.
Kurz: Man musste sich halt mit den Zeichen behelfen, die nunmal da waren. Also vermute ich, dass ansonsten keine Zeichen mehr da waren. Ich wunderte mich früher nämlich auch immer, warum zum Beispiel @ und $ in C überhaupt keine Rolle spielen, bis ich an einem Computer saß, der keine geschweiften Klammern hatte...