Zugriff auf Map-Element mit Zeiger

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
AndyMars
Beiträge: 139
Registriert: 08.09.2004 11:59
Computerausstattung: Win10 Home 64bit, i7-2600k @ 3.4 GHz, 8GB RAM, AMD Radeon R9 200
Wohnort: Zürich, Schweiz
Kontaktdaten:

Zugriff auf Map-Element mit Zeiger

Beitrag von AndyMars »

Hallo allerseits

Gemäss Hilfe liefert der Befehl AddMapElement() einen Zeiger auf die "Element-Daten". Soweit so einfach - zumindest einen Zeiger zu bekommen... :)

Code: Alles auswählen

NewMap test.s()

*ptr=AddMapElement(test(), "irgendeinwert")
test()="mitetwasdrin"

Debug *ptr
Aber was kann ich mit diesem Zeiger nun machen? Kann ich auf den Schlüssel oder den Wert mit diesem Zeiger zugreifen? Und wenn ja, wie?

Grüss euch, Andy
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8677
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Zugriff auf Map-Element mit Zeiger

Beitrag von NicTheQuick »

So kommst du an den Inhalt und an den Key. Aber letzteres ist so nicht dokumentiert.

Code: Alles auswählen

NewMap test.s()

*ptr.String = AddMapElement(test(), "irgendeinwert")
test() = "mitetwasdrin"

Debug "Inhalt: " + *ptr\s
*ptr - SizeOf(String)
Debug "Key: " + *ptr\s
Vermutlich ist es unproblematisch den Inhalt mittels Pointer zu ändern, aber den Schlüssel solltest du auf keinen Fall ändern.
Bild
Benutzeravatar
AndyMars
Beiträge: 139
Registriert: 08.09.2004 11:59
Computerausstattung: Win10 Home 64bit, i7-2600k @ 3.4 GHz, 8GB RAM, AMD Radeon R9 200
Wohnort: Zürich, Schweiz
Kontaktdaten:

Re: Zugriff auf Map-Element mit Zeiger

Beitrag von AndyMars »

Ah, das ist cool, danke Nic. Ich werde nur lesend auf die Map zugreifen mit dem Zeiger. Für Schreibzugriffe kann ich ja die regulären Befehle von Purebasic (PB) verwenden.

Die Notation "*ptr.String" sieht ja aus wie eine Zuweisung einer Struktur - kommt diese von Windows?

In meinem Kopf rotiert es gerade ziemlich... :? Und dann kann man das Ganze offensichtlich wie ein PB-String verwenden (Debug "Inhalt: " + *ptr\s) ...faszinierend...
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Zugriff auf Map-Element mit Zeiger

Beitrag von Josh »

AndyMars hat geschrieben:Die Notation "*ptr.String" sieht ja aus wie eine Zuweisung einer Struktur - kommt diese von Windows?
Es handelt sich um eine von Pb vordefinierte Struktur.

Code: Alles auswählen

Structure String
  s.s
EndStructure
Im englischen Forum gibt es einen Feature Request der gerade aktuell ist. Eine native Funktion ist immer besser als ein Workaround. Vielleicht kannst ja auch was dazu schreiben, um so mehr sich dazu äußern, desto besser die Chancen dass es umgesetzt wird.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Zugriff auf Map-Element mit Zeiger

Beitrag von Josh »

Was vielleicht ein wenig untergegangen ist. Den Zeiger brauchst du bei Maps in wahrscheinlich 99% der Fälle nicht. Der eigentliche Sinn und Zweck von Maps ist ja, dass du etwas mit einem Key anlegen und mit diesem Key wieder abrufen kannst.
Antworten