Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zurückgeben von Arrays (https://www.delphipraxis.net/71631-zurueckgeben-von-arrays.html)

3_of_8 18. Jun 2006 19:28


Zurückgeben von Arrays
 
Morgen.

Ich habe ein Array und gebe das in einer Funktion zurück. (Result:=MyArray;)

Wird das dabei per CallByReference oder per CallByValue übergeben?

sniper_w 18. Jun 2006 19:37

Re: Zurückgeben von Arrays
 
CallByReference

3_of_8 18. Jun 2006 19:45

Re: Zurückgeben von Arrays
 
Gibts eine Array-Kopierfunktion?

Dax 18. Jun 2006 19:49

Re: Zurückgeben von Arrays
 
Nennt sich Copy().

Khabarakh 18. Jun 2006 19:54

Re: Zurückgeben von Arrays
 
Zitat:

Zitat von sniper_w
CallByReference

Aber nur bei bei dynamischen Arrays.

3_of_8 18. Jun 2006 20:23

Re: Zurückgeben von Arrays
 
Ich hab grad gemerkt, dass mein Code eh falsch war und ich das Array sowieso nicht kopieren kann.

_frank_ 18. Jun 2006 23:20

Re: Zurückgeben von Arrays
 
übergebe das ausgabe-array mit als parameter...so wird das z.B. bei stringlisten gehandhabt.

zur veranschaulichung:
Delphi-Quellcode:
procedure blah(eingabe:string;ausgabe:array of char);
begin
  setlength(ausgabe,length(eingabe));
  for i:=1 to length(eingabe) do
    ausgabe[i]:=s[i];
end;
edit:evtl. musst du den parameter als var definieren (wegen setlength)
Delphi-Quellcode:
procedure blah(eingabe:string; var ausgabe:array of char);
Gruß Frank

chaoslion 19. Jun 2006 05:48

Re: Zurückgeben von Arrays
 
wobei das erste char element im array dann leer bleibt;
kann man doch dann auch so machen:
Delphi-Quellcode:
for i:=0 to length(eingabe)-1 do
 ausgabe[i] := eingabe[i+1];

himitsu 19. Jun 2006 06:23

Re: Zurückgeben von Arrays
 
Zitat:

Zitat von chaoslion
wobei das erste char element im array dann leer bleibt

nicht nur das ... viel schlimmer verhält sich das letze Char,
denn dieses würde außerhalb des Arrays landen. :warn:

PS: /me würde es so machen ;)
Delphi-Quellcode:
Move(eingabe[1], ausgabe[0], Length(eingabe));

alzaimar 19. Jun 2006 07:33

Re: Zurückgeben von Arrays
 
Wenn eine Prozedur/Funktion/Methode ein Array zurückliefern soll, muss es als 'Var' deklariert sein, und nicht nur eventuell, sondern garantiert.
'Var' bedeutet, das Änderungen am Parameter dem Aufrufer nicht verborgen bleiben. Ohne das 'Var' wird vor dem Aufruf eine Kopie angelegt. Die aufgerufene Methode pfuscht dann in der Kopie herum. Nach Beendigung der Methode sind alle Änderungen futsch.

Um nun Arrays als Rückgabeparameter zu deklarieren, gibt es zwei Möglichkeiten: Entweder man vereinbart einen Datentypen (a) oder man verwendet offene Arrays (b).

Möglichkeit a:
Delphi-Quellcode:
Type
  TMyArray = Array [0..9] Of TSomething;
...
Procedure MyProcedure (Var aMyArray : TMyArray);
Begin
...
End;
...
Var
  a : TMyArray;
Begin
  MyProcedure (a);
End;
oder b:
Delphi-Quellcode:
Procedure MyProcedue (Var aMyArray : Array Of TSomething);
Begin
...
End;
...
Var
  a : Array [0..4] Of TSomething;
  b : Array [0..999] Of TSomething;

Begin
  MyProcedure (a);
  MyProcedure (b);
End;
Natürlich geht auch c:
Delphi-Quellcode:
Type
  TMyArray = Array [0..9] Of TSomething;
...
Function MyFunction : TMyArray;
Begin
  Result[0] := Foobar;
End;
...
Var
  a : TMyArray;
Begin
  a := MyFunction;
End;
Variante c ist kein Standard-Pascal aber legitim. Ich finde häßlich, aber das ist Geschmackssache.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz