Seite 1 von 1
Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?
Verfasst: 21.10.2022 00:20
von jacdelad
Hallo,
wie der Titel schon sagt: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable? Ein "*"-Variable ist nach meinem Verständnis ein Zeiger auf eine Speicheraddresse (sofern zugewiesen), bzw. dafür vorgesehen. Das gleiche funktioniert aber auch mit einer ".i"-Variable. Dient das nur zur Unterscheidung des Verwendungszwecks oder habe ich da was übersehen?
Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?
Verfasst: 21.10.2022 01:28
von mk-soft
Teilweise ...
Ein Integer (i) ist immer so groß wie ein Register. Also so groß wie ein Pointer (*).
Aber einen Pointer (*) kann man eine Struktur zuweisen, was bei einem Integer nicht geht.
Ausserdem ist es auch besser zu unterscheiden ob es sich um einen Wert (i) oder ob es sich um ein Zeiger (*) handelt
Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?
Verfasst: 21.10.2022 02:10
von jacdelad
Verstehe ich nicht ganz:
Code: Alles auswählen
Define MeineDaten.POINT
MeineDaten\x=1
MeineDaten\y=2
Debug MeineDaten\x
Debug MeineDaten\y
...geht doch.
Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?
Verfasst: 21.10.2022 09:57
von NicTheQuick
Du hast hier ja auch eine statische strukturierte Variable definiert. Das ist kein Pointer. Das kann man mit Pointern machen:
Code: Alles auswählen
Structure Vector2D
x.d
y.d
EndStructure
Define v1.Vector2D
v1\x = 1
v1\y = 2
Define v2.Vector2D
v2\x = 3
v2\y = 4
Define *p.Vector2D
; Weise dem Pointer die Adresse von v1 zu und gib die Daten an der Adresse aus, indem du sie mit der Struktur Vector2D interpretierst
*p = @v1
Debug *p\x
Debug *p\y
; Jetzt das selbe mit v2
*p = @v2
Debug *p\x
Debug *p\y
; Und jetzt ändere was in *p
*p\x = 300
*p\y = 400
; Aber gib nun die Werte von v2 aus
Debug v2\x
Debug v2\y
Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?
Verfasst: 21.10.2022 18:24
von STARGÅTE
Einen unterschied im Wertebereich gibt es (aktuell) nicht. Ich sage aktuell, weil sich das durchaus ändern kann.
Als es früher noch keine Integer als Typ gab, sondern nur Long und x86 Prozessoren, dachte viele auch, dass es kein Unterschied macht ob man Adresse.l oder *Adresse schreibt. Nun, im Zuge von x64, habe diese Leute Probleme alle Bugs auszumerzen.
Einen unterscheid in der Syntax gibt es hingegen schon.
Das * gehört z.B. mit zum Variable-Namen, die normale Typenbezeichnung nach dem Punkt nicht.
Einem Pointer kann wie von mk-soft geschrieben eine beliebige Struktur zugewiesen werden, in der gelesen und geschrieben werden kann ohne die Peek() und Poke() Befehle zu nutzen.
Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?
Verfasst: 21.10.2022 21:32
von jacdelad
Ah verstehe, glaube ich. Vielen Dank euch.