Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?

Beitrag 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?
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?

Beitrag 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.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Besteht ein wirklicher Unterschied zwischen Variable.i und *Variable?

Beitrag von jacdelad »

Ah verstehe, glaube ich. Vielen Dank euch.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Antworten