Nerog: Zeiger-Verhalten bei Arrays

Beitrag lesen

Das finde ich verwirrend - wahrscheinlich weil ich ebenfalls nicht so recht weiß, was es bedeutet, dass eine Variable *direkt* ein Objekt enthält.

Eine Variable ist ja erstmal ein symbolischer Name im Quellcode. Man kann sich nun vorstellen, dass sie direkt ein Objekt repräsentiert oder dass sie eine Referenz auf ein Objekt darstellt – unabhängig davon wie die Realisierung genau aussieht. Man sollte seine Vorstellung eben so wählen, dass sie das Verhalten der Variable im Code widerspiegelt.
Welche Vorstellung ich als am intuitivsten ansehe, habe ich ja schon geschrieben (weil ich denke, dass diese der tatsächlichen Implementierung entspricht), wenn du ein andere Vorstellung besser verständlich findest, ist das ja erst mal kein großes Problem, solange wir die selben Schlüsse über das Verhalten der Variable daraus ziehen.

Ist eine Variable nicht immer ein Verweis auf die Speicherstelle, wo dann die zugehörigen Nullen und Einsen liegen?

Warum? Es gibt keine Variable, die ein Verweis auf die Speicherstelle hält, es gibt nur die Speicherstelle selbst (z.B. im Stack oder im Datensegment). Die Prozessorbefehle können direkt auf der Speicherstelle arbeiten.
Die Variable ist ja nur der symbolische Name im Quell-Code für diese Speicherstelle, im kompilierten Code gibt es die Variable (im Sinne eines Verweises) ja nicht mehr.

Es _kann_ aber natürlich auch Speicherstellen geben, die auf andere verweisen, eben Zeiger/Referenzen.

Klar, bei einer Zuweisung an die Variable überschreibe ich diese Speicherstelle selbst

Exakt.
Und zwar immer, überall, ohne Ausnahmen oder komplizierte Sonderfälle.
Nur in ECMAScript speichert eine Variable immer nur eine Referenz auf ein Objekt (sofern sie kein Primitive ist).

Meinst du etwa Pascal, wo eben echte Referenzparameter wie im Wikipedia-Beispiel möglich sind?
Aber dort ist die Variable dann auch eine Referenz auf eine Speicherstelle.

Nein, die Variable repräsentiert auch hier das Objekt selbst. Das unterscheidet ja eben kopierte Werte (call by value) von Referenzen (call by reference).
Dass eine Referenzvariable letztendlich auf Assembler-Ebene auf eine Art Zeiger heruntergebrochen wird, ist wohl naheliegend; aber das ist aus Programmierersicht ein Implementierungsdetail des Compilers, um das man sich normalerweise nicht weiter kümmern muss. Aus Programmierersicht repräsentiert ein by reference übergebenes Objekt das Objekt selbst. Ein by value übergebenes Objekt ist entweder eine Kopie des Objekts oder (wie im Falle von ECMAScript) eine Kopie der Objektreferenz.

Gruß,
Nerog