Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
procedure getarray()
dim array.s(5)
for i = 0 to 5
array(i) = "test"+str(i)
next i
procedurereturn @array()
enprocedure
dim array2.s(5)
array2() = getarray()
for i = 0 to 5
debug array2(i)
next i
bei mir kommt an arraystelle 1 immer ein falscher wert... der rest geht!
Vielleicht solltest Du einfach mal das lesen, was in meinem vorigen Beitrag (direkt über Deinem) steht!!?? Manchmalfassichtsechtnich
procedure getarray()
dim array.s(5)
for i = 0 to 5
array(i) = "test"+str(i)
next i
procedurereturn @array()
enprocedure
dim array2.s(5)
array2() = getarray()
for i = 0 to 5
debug array2(i)
next i
bei mir kommt an arraystelle 1 immer ein falscher wert... der rest geht!
ACHTUNG!
In der Prozedur wird ein Array angelegt, das aber nur lokal innerhalb der Prozedur GÜLTIGT ist! Am Ende der Prozedur wird der Speicher des Arrays wieder freigegeben. D.h. die Adresse, die zurückgegeben wird, zeigt auf ein nicht mehr gültiges Array. Der Speicherbereich KANN evt. noch die richtigen Werte beinhalten ... muss aber nicht!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
das ist jetzt doof...
ich habe vor, einen buffer einlesen, und einen array auszulesen...
wie ist das möglich? indem ich einen buffer und einen array einlese?
über den globalen weg finde ich es unsauber...
wie kann ich denn einen array an eine procedure übergeben?
Die neuen Arrays sind immer lokal. Dies bedeutet, dass die Global oder Shared Befehle benutzt werden müssen, wenn ein im Haupt-Quellcode deklariertes Array in Prozeduren verwendet werden soll. Es ist auch möglich, ein Array als Parameter an eine Prozedur zu übergeben - es wird dabei "by reference" (was bedeutet, dass das Array nicht kopiert wird, sondern stattdessen die Funktionen in der Prozedur das originale Array manipulieren) übergeben.
; Beispiel: Array als Prozedur-Parameter
Procedure fill(A.l(1), length) ; die 1 gibt hier die Anzahl der Dimensionen im Array an.
For i = 0 To length
A(i) = i
Next i
EndProcedure
Dim A.l(10)
fill(A(), 10) ; das Array A() wird hier als Parameter übergeben
Debug A(5)
Debug A(10)
Pers. Anm.: Ich finde den Variablennamen "length" nicht geeignet, denn die Länge ist bei "Dim A.l(10)" ja eigentlich 11!
Windows 10
PB Last Final / (Sometimes testing Beta versions)