Seite 1 von 1
Zeiger auf Strukturen in Strukturen
Verfasst: 03.02.2005 23:52
von bEEtzY
Hallo Leute,
habe da ein kleines Zeigerproblem,
ich versuche einen Zeiger auf eine Strukture1 in einer anderen Struktur2 zu speichern, wie kann ich nun ueber Struktur2 auf den Inhalt von Struktur1 zugreifen?
Beispiel:
Structure Struct1
a.l
EndStructure
Structure Struct2
S1.l
EndStructure
NewList Structure2.Struct2()
NewList Structure1.Struct1()
AddElement(Structure1())
a = 10
Procedure.l Add(*Struct.Struct1)
AddElement(Structure2())
Structure2()\S1 = *Struct
ProcedureReturn @Structure2()
EndProcedure
Procedure Access(*Struct.Struct2)
; wie kann ich nun auf a von Structure1 zugreifen???
; und weshalb kann ich in der Definition von Struct2
; nicht *S1.Struct1 schreiben???
EndProcedure
im vorraus schon herzlichen dank!
Verfasst: 04.02.2005 00:04
von GPI
Pointer (*pointer) werden leider nicht richtig in Structuren unterstützt, bzw. sind fehlerhaft
Denkansatz (und Lösung?)
Verfasst: 04.02.2005 09:59
von bEEtzY
Das Problem ist, dass ich nicht an die Werte ran komme, wenn ich folgendes mache:
Add(@Structure1())
Debug Structure2()\S1
Debug @Structure1()
so ergeben beide Debugausgaben die gleiche Adresse, also ist die Adresse von Struktur1 in der Struktur2 gespeichert, aber ich komme nicht an den Inhalt von Struktur1 heran, also 'a'.
Das muss doch irgendwie gehen!?
Verfasst: 04.02.2005 12:53
von Dostej
Code: Alles auswählen
Structure Struct1
a.l
EndStructure
Structure Struct2
S1.l
s2.l
EndStructure
NewList Structure2.Struct2()
NewList Structure1.Struct1()
Procedure.l Add(*Struct.Struct1)
AddElement(Structure2())
Structure2()\S1 = *Struct
ProcedureReturn @Structure2()
EndProcedure
Procedure Access(*Struct.Struct2)
; wie kann ich nun auf a von Structure1 zugreifen???
Debug "access"
Debug *Struct\S1 ; das ist deine Adresse
Debug PeekL(*Struct\S1) ; und so liest du sie aus
; und weshalb kann ich in der Definition von Struct2
; nicht *S1.Struct1 schreiben???
; da hab ich selber keine Ahnung...
EndProcedure
AddElement(Structure1())
Structure1()\a = 10 ; a musst du als teil der struktur belegen
Debug Add(@Structure1())
Debug Structure2()\S1
Debug @Structure1()
Access(@Structure2())
Du hattest nur die Variable a belegt
wenn Du das Element a in der Struktur struct1 belegen möchtest, geht das so
Auf den Inhalt greifst per PeekL zu (siehe oben)
Hoffe das hilft dir etwas
Verfasst: 04.02.2005 13:08
von Dostej
Falls Du die Struktur struct1 etwas komplexer hast, kannst Du über diesen Weg dir die Progeammierarbeit etwas erleichtern, kostet aber etwas mehr Rechenzeit...
Code: Alles auswählen
Structure Struct1
a.l
EndStructure
Structure Struct2
S1.l
s2.l
EndStructure
NewList Structure2.Struct2()
NewList Structure1.Struct1()
Procedure.l Add(*Struct.Struct1)
AddElement(Structure2())
Structure2()\S1 = *Struct
ProcedureReturn @Structure2()
EndProcedure
Procedure Access(*Struct.Struct2)
; wie kann ich nun auf a von Structure1 zugreifen???
Debug "access"
Debug *Struct\S1 ; das ist deine Adresse
Debug PeekL(*Struct\S1) ; und so liest du sie aus
; wenn du komplexere Strukturen hast, kannst Du die Arbeit etwas erleichtern, kostet dafür etwas mehr Zeit...
tmp.Struct1
CopyMemory(*Struct\S1, @tmp, SizeOf(Struct1))
Debug "a über hilfsvar: " + Str(tmp\a)
tmp\a = 20
; wenn Du Änderungen machst, kannst du dann wieder so zurückschreiben
CopyMemory(@tmp, *Struct\S1, SizeOf(Struct1))
; und weshalb kann ich in der Definition von Struct2
; nicht *S1.Struct1 schreiben???
; da hab ich selber keine Ahnung...
EndProcedure
AddElement(Structure1())
Structure1()\a = 10 ; a musst du als teil der struktur belegen
Debug Add(@Structure1())
Debug Structure2()\S1
Debug @Structure1()
Access(@Structure2())
Debug "a nach änderung: " + Str(Structure1()\a)
Dabei nimmst du eine Hilfsvariable, initialisierst die mit der Struktur struct1 und kopierst dann die Inhalte rüber. Dann kannst du mit den üblichen Strukturaddressierungen drauf zugreifen. Bei Änderungen müsst du diese dann eben wieder zurückschreiben. (Siehe das Beispiel im Code)