Seite 1 von 1
Pointer auf strukturierte LL übergeben
Verfasst: 01.03.2010 20:35
von teamO
Hi,
gibt es in PB eine Möglichkeit Prozeduren einen Pointer auf eine strukturierte Linked List zu übergeben?
Ich hab schon ein bisschen rum probiert, hatte aber bis jetzt nur teilweise erfolg:
Code: Alles auswählen
Structure test
x.b
y.b
EndStructure
Procedure listTestStruct(List *a1.test())
ForEach *a1()
i+1
Debug *a1()\x
Next
EndProcedure
Procedure listTest(List *a1.b())
ForEach *a1()
i+1
Debug *a1()
Next
EndProcedure
NewList a1.test()
NewList a2.b()
For i=0 To 5
AddElement(a1())
a1()\x=i
a1()\y=i
Next
For i=0 To 5
AddElement(a2())
a2()=i
Next
listTestStruct(@a1())
listTest(@a2())
während listTest() wie erhofft funktioniert kommt es bei listTestStruct() zu einem Lauzeitfehler:
der pointer *a1 ist "null"
Kann PB das nicht, oder bin ich nur noch nicht draufgekommen, wies geht?
PS: ich nutze PB 4.3
PPS: mein erster Beitrag in diesem Forum
Re: Pointer auf strukturierte LL übergeben
Verfasst: 01.03.2010 21:11
von Josh
soweit ich weiß, kannst du eine list an die procedur übergeben, aber keinen pointer darauf.
schau mal da:
http://www.purebasic.fr/german/viewtopi ... =3&t=21959
Re: Pointer auf strukturierte LL übergeben
Verfasst: 01.03.2010 21:17
von ts-soft
So wie ich das sehe, machen die Pointer in dem Beispiel gar keinen Sinn. Einfach
weglassen und alles wird schön.
Re: Pointer auf strukturierte LL übergeben
Verfasst: 01.03.2010 21:21
von Josh
wenn du allerdings ganz normal eine list mit struktur übergeben willst, dann ist das kein problem:
Code: Alles auswählen
Structure test
x.b
y.b
EndStructure
Procedure listTestStruct(List a1.test())
ForEach a1()
Debug Str(a1()\x) + " " + Str(a1()\y)
Next
EndProcedure
NewList a1.test()
For i=7 To 10
AddElement(a1())
a1()\x=i
a1()\y=i*2
Next
listTestStruct(@a1())
teamO hat geschrieben:PPS: mein erster Beitrag in diesem Forum
na denn, willkommen hier
Re: Pointer auf strukturierte LL übergeben
Verfasst: 01.03.2010 21:30
von ts-soft
Ohne @ bitte
PureBasic macht das so oder so ByRef
Code: Alles auswählen
Structure test
x.b
y.b
EndStructure
Procedure listTestStruct(List a0815.test())
Debug "In der Proc"
ForEach a0815()
Debug Str(a0815()\x) + " " + Str(a0815()\y)
Next
AddElement(a0815())
a0815()\x = 50
a0815()\y = 100
EndProcedure
NewList a1.test()
For i=7 To 10
AddElement(a1())
a1()\x=i
a1()\y=i*2
Next
listTestStruct(a1())
Debug "Ausserhalb der Proc mit neuem Eintrag"
ForEach a1()
Debug Str(a1()\x) + " " + Str(a1()\y)
Next
Re: Pointer auf strukturierte LL übergeben
Verfasst: 01.03.2010 23:21
von teamO
wow, das ging aber schnell. dankeschön.
Das heißt dann also: Wenn ich die Liste in der Prozedur ändere, dann wird sie auch im Hauptprogramm geändert, oder?
Ist das dann bei jedem Datentyp als Parameter so, oder nur bei Listen?
Eine andere Frage: Wofür brauche ich dann überhaupt noch Pointer? Ich hab gedacht, dass die grade dafür da sind, dass man die als Parameter übergebenen Daten innerhalb der Prozedur nicht nur lesen sondern auch ändern kann. Scheinbar hab ich da was falsch verstanden *amKopfKratz*
(gibts denn keinen am-kopf-kratz smily? Könnte man hier doch sicher oft gebrauchen

)
Re: Pointer auf strukturierte LL übergeben
Verfasst: 01.03.2010 23:25
von ts-soft
teamO hat geschrieben:wow, das ging aber schnell. dankeschön.
Das heißt dann also: Wenn ich die Liste in der Prozedur ändere, dann wird sie auch im Hauptprogramm geändert, oder?
Ist das dann bei jedem Datentyp als Parameter so, oder nur bei Listen?
Nein, bei einfachen Typen (Byte, Word, Char, Long, Integer, Quad, Fload und Double) nicht.
Pointer machen schon Sinn, aber nicht im Zusammenhang mit Deinem Beispiel
Gruß
Thomas