Macro tausche(a,b)
c=a
a=b
b=c
EndMacro
d=5
e=6
tausche(d,e)
Debug d
Debug e
Und warum das mit der Prozedur nicht geht ist doch klar... Du speicherst den Inhalt in a und b - aber die Varibalen d und e bleiben gleich - du uebergibst nur den Wert an die Prozedur...
Dare Devil hat geschrieben:Und warum das mit der Prozedur nicht geht ist doch klar... Du speicherst den Inhalt in a und b - aber die Varibalen d und e bleiben gleich - du uebergibst nur den Wert an die Prozedur...
Er fragte ja, ob's auch Call by Reference gibt.
Soweit ich weiß gibt's das aber nur für Strukturen, mit einzelnen Variablen hab ich's bisher auch noch nie hingekriegt. Möglicherweise gibt's hier für aber auch eine Möglichkeit.
ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Dare Devil hat geschrieben:Und warum das mit der Prozedur nicht geht ist doch klar... Du speicherst den Inhalt in a und b - aber die Varibalen d und e bleiben gleich - du uebergibst nur den Wert an die Prozedur...
Er fragte ja, ob's auch Call by Reference gibt.
Soweit ich weiß gibt's das aber nur für Strukturen, mit einzelnen Variablen hab ich's bisher auch noch nie hingekriegt. Möglicherweise gibt's hier für aber auch eine Möglichkeit.
Also ich benutze fuer solche Faelle jedenfalls Macros... wuesst jetzt auch nichts, was gegen Benutzung von Macros spricht...
Procedure mySwap (*a.Long, *b.Long) ; Long ist eine vordefinierte Struktur!
Protected c.l
c = *a\l
*a\l = *b\l
*b\l = c
EndProcedure
Define x.l, y.l
x = 3
y = 7
Debug x
Debug y
mySwap(@x, @y)
Debug x
Debug y
Danke für die vielen und ausführlichen Antworten!
Mir war es schon fast peinlich die Frage zu stellen, aber ich kam einfach nicht drauf. Dann habe ich SWAP gefunden und gedacht ich höre mir trotzdem mal an wie das funzt - braucht man ja immer mal wieder...
Das Call-by-Reference aber in PureBasic scheinbar so nicht vorgesehen ist (=nur über Umwege erreichbar) hätte ich auch nicht gedacht.
... es ist eben nur so, dass du es so hinschreiben musst, dass man auch genau sieht was du tust.
die Übergabe von Variablenadressen und das Adressieren über Pointer ist ein ganz grundlegender Bestandteil jeder Programmierung.
in anderen Sprachen tut CallbyRef im Endeffekt genau das selbe, aber es versteckt das hinter dem Begriff.
Vieles wird in so mancher Sprache einfach hinter zusätzlichen schlüsselwörtern versteckt.
Ein guter Programmierer sollte trotzdem wissen, was es tut.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.