GLBasic forum

Other languages => GLBasic - de => Topic started by: WPShadow on 2008-Apr-27

Title: Funktionen & Array & Byref
Post by: WPShadow on 2008-Apr-27
Hi!

Hab ein kleines Problem zu lösen und keinen Plan wie!

Ich möchte aus einer Funktion mehrere Arrays RETURNen. Mit BYREF funktioniert es nicht und auch sonst hab ich noch leider keine Lösung gefunden.

Was tun? Wie könnte ich das lösen? Ich würde nämlich gerne mehrere Arrays auf einmal übergeben!?!

Gruß

W.
Title: Funktionen & Array & Byref
Post by: Tiuz on 2008-Apr-27
Hallo,

Arrays als Argumente von Funktionen werden standardmäßig BYREF übergeben.
Glbasic ist da sehr frei, es ist egal ob ein oder mehrere Arrays als Input oder Output dienen, ob sie schon allokiert sind oder nicht etc..
Was genau geht denn nicht ?

Tiuz.
Title: Funktionen & Array & Byref
Post by: Quentin on 2008-Apr-27
Arrays werden immer BYREF übergeben, also ohne explizite Angabe von BYREF ;)), sollten auch mehrere übergeben werden können.
wie sieht dein Problem denn konkret aus?
`
Title: Funktionen & Array & Byref
Post by: Schranz0r on 2008-Apr-27
Falsch Quentin :)
Es können keine Arrays/Felder übergeben werden mit BYREF, siehe Hilfe:

QuoteFelder werden immer als Referenz übergeben. Hier ist ein BYREF obsolet.
Title: Funktionen & Array & Byref
Post by: WPShadow on 2008-Apr-27
Code (glbasic) Select
LOCAL PosX[], PosY[]

DIM PosX[10]
DIM PosY[10]

Machwas(PosX[], PosY[])



WHILE TRUE

PRINT PosX[0] + "     " + PosY[0], 10, 10

SHOWSCREEN
WEND
END


CALLBACK FUNCTION Machwas: BYREF x[], BYREF y[]

DIM x[10]
DIM y[10]

 x[0] = 100
 y[0] = 200

ENDFUNCTION
So inetwa dachte ich es mir, aber so funktioniert es nunmal nicht. Ansonsten hätte man den Zeiger von dem einen Feld einfach aufs andere Feld legen können. So zumindest meine Erklärung für das Problem...
Title: Funktionen & Array & Byref
Post by: Schranz0r on 2008-Apr-27
öhmm dir werden ja mit zeiger übergeben, aber zeiger + zeiger = Mag GLB nicht ^^
Title: Funktionen & Array & Byref
Post by: Quentin on 2008-Apr-27
Schranzor das meinte ich ja. Arrays werden immer als Referenz übergeben, ohne daß man BYREF angibt ;)
Title: Funktionen & Array & Byref
Post by: D2O on 2008-Apr-27
Öhmm,
Du möchtest also das mehere Array's ein Function übergeben werden, die intern berarbeitet werden und dann wieder mehrere Array's zurück geben,
richtig?

Warum benutzt Du nicht Types?
Hier kannst Du Arrays, "Normale" Variablen, Strings übergeben bzw. zurück geben und das alles in einem Rutsch.

Code (glbasic) Select
ay = 10
by = 10
cy = 10


GLOBAL array AS Tarray

REDIM array.a[10]
REDIM array.b[10]
REDIM array.c[10]

count = 0

FOR i = 0 TO 9

array.a[i] = count
array.b[i] = count
array.c[i] = count

INC count,1

NEXT


array = uparray(array)

FOR i = 0 TO 9
PRINT array.a[i],10,ay+(i*10)
PRINT array.b[i],50,by+(i*10)
PRINT array.c[i],90,cy+(i*10)
NEXT


SHOWSCREEN
KEYWAIT



FUNCTION uparray AS Tarray: l_in AS Tarray

FOR i = 0 TO 9
l_in.a[i] = l_in.a[i]+100
l_in.b[i] = l_in.b[i]+200
l_in.c[i] = l_in.c[i]+300

NEXT




RETURN l_in
ENDFUNCTION


TYPE Tarray

a[0]
b[0]
c[0]


ENDTYPE
Title: Funktionen & Array & Byref
Post by: Schranz0r on 2008-Apr-27
Hmmm... interessanter Lösungsvorschlag!
Title: Funktionen & Array & Byref
Post by: WPShadow on 2008-Apr-28
Die Lösung ist super! Klemme mich gleich mal dahinter! Danke...