Ich glaube sma hat das ganz gut auf den Punkt gebracht: Was sind überhaupt Pointer? Über eine formale Definition wäre ich froh, aber ich vermute einfach mal es gibt keine.
Ich kann nur festhalten, dass sich Java-Referenzen genau wie C-Pointer verhalten, wobei die De/refenzierung implizit erfolgt. Demnach sind es gemäß Duck-Typing Pointer.
Imho wäre die beste Definition, das Ding nach seinem Zweck zu benennen.
Zeiger: zeigen auf Werte
Referenzen: zeigen auf Variablen
Java-Referenzen zeigen auf Objekte - damit sind es Zeiger
Python-Namen zeigen auf Objekte - damit sind es Zeiger
Ob ich jetzt selbst eine bel. Speicheradresse festlegen darf oder ob ich sie selbst dereferenzieren darf sind imo nur Implementierungsdetails. Je nachdem wie viel man nicht darf, kann man sie ja umbenennen, prinzipiell bleiben es aber Zeiger.
Pass by value erzwingen?
Der englische Wikipedia-Artikel spiegelt das allgemeine Verständnis recht gut wieder.Darii hat geschrieben:Ich glaube sma hat das ganz gut auf den Punkt gebracht: Was sind überhaupt Pointer? Über eine formale Definition wäre ich froh, aber ich vermute einfach mal es gibt keine.
Edit: Argh, böse Klammern in der URL: http://en.wikipedia.org/wiki/Pointer_(computing)
Das Leben ist wie ein Tennisball.
Java-Referenzen verhalten sich eben nicht wie C-Pointer. Denn bei C-Pointern gibt's keine automatische Dereferenzierung.
Wenn Du sagst Referenzen zeigen auf Variablen, was bitte meinst Du dann mit "Variable"? Eine Variable besteht im Allgemeinen aus einem Namen, einem Typ, einem Wert, und einer Speicheradresse. Ob Typ und Speicheradresse dem Namen oder dem Wert zugeordnet werden, hängt von der Sprache ab. Bei C "hängt" beides am Namen, bei Python am Wert.
Das man selber die Speicheradresse festlegen und selber über's dereferenzieren entscheiden kann, ist für mich genau das Verhalten, was Zeiger ausmacht und kein Implementierungsdetail. Das ist so als wenn man sagen würde, ich habe hier einen Stapel ohne `push()` und `pop()` aber prinzipiell ist's ein Stapel.
Wenn Du sagst Referenzen zeigen auf Variablen, was bitte meinst Du dann mit "Variable"? Eine Variable besteht im Allgemeinen aus einem Namen, einem Typ, einem Wert, und einer Speicheradresse. Ob Typ und Speicheradresse dem Namen oder dem Wert zugeordnet werden, hängt von der Sprache ab. Bei C "hängt" beides am Namen, bei Python am Wert.
Das man selber die Speicheradresse festlegen und selber über's dereferenzieren entscheiden kann, ist für mich genau das Verhalten, was Zeiger ausmacht und kein Implementierungsdetail. Das ist so als wenn man sagen würde, ich habe hier einen Stapel ohne `push()` und `pop()` aber prinzipiell ist's ein Stapel.
Guck dir halt mein C++ Beispiel und sag mir wie man das besser formulieren kann. C++ Referenzen kannst du nur Variablen zuweisen nicht die Werte selbst(int &a = 2 geht nicht).BlackJack hat geschrieben:Wenn Du sagst Referenzen zeigen auf Variablen, was bitte meinst Du dann mit "Variable"?
Deswegen habe ich ja nach einer formalen Definition gefragt. „ist für mich genau“ ist jedenfalls keine Definition sondern genau das Problem. Ein Stapel ist hingegen als ADT genau definiert.Das man selber die Speicheradresse festlegen und selber über's dereferenzieren entscheiden kann, ist für mich genau das Verhalten, was Zeiger ausmacht und kein Implementierungsdetail. Das ist so als wenn man sagen würde, ich habe hier einen Stapel ohne `push()` und `pop()` aber prinzipiell ist's ein Stapel.
Wir reden ja von dem Datentyp, den man meint, wenn man eine Sprache mit Zeigertypen hat. Der Datentyp ist bei C und Pascal zum Beispiel sicher auch irgendwo formal definiert.
>>der vorteil ist, dass bei cbv der funktion die variable auf den stack gelegt wird.
die funktion hat direkten zugriff und muss keinen pointer dereferenzieren.BlackJack hat geschrieben:In wie weit ist das jetzt ein Vorteil?
http://www.kinderpornos.info