Pass by value erzwingen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
Zuletzt geändert von Darii am Donnerstag 14. Mai 2009, 13:56, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Der englische Wikipedia-Artikel spiegelt das allgemeine Verständnis recht gut wieder.

Edit: Argh, böse Klammern in der URL: http://en.wikipedia.org/wiki/Pointer_(computing)
Das Leben ist wie ein Tennisball.
BlackJack

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.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

BlackJack hat geschrieben:Wenn Du sagst Referenzen zeigen auf Variablen, was bitte meinst Du dann mit "Variable"?
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).
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.
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.
BlackJack

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.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

>>der vorteil ist, dass bei cbv der funktion die variable auf den stack gelegt wird.
BlackJack hat geschrieben:In wie weit ist das jetzt ein Vorteil?
die funktion hat direkten zugriff und muss keinen pointer dereferenzieren.
http://www.kinderpornos.info
Antworten