AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zurückgeben von Arrays

Ein Thema von 3_of_8 · begonnen am 18. Jun 2006 · letzter Beitrag vom 19. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#1

Zurückgeben von Arrays

  Alt 18. Jun 2006, 20:28
Morgen.

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

Wird das dabei per CallByReference oder per CallByValue übergeben?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Zurückgeben von Arrays

  Alt 18. Jun 2006, 20:37
CallByReference
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Zurückgeben von Arrays

  Alt 18. Jun 2006, 20:45
Gibts eine Array-Kopierfunktion?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Zurückgeben von Arrays

  Alt 18. Jun 2006, 20:49
Nennt sich Copy().
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Zurückgeben von Arrays

  Alt 18. Jun 2006, 20:54
Zitat von sniper_w:
CallByReference
Aber nur bei bei dynamischen Arrays.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Zurückgeben von Arrays

  Alt 18. Jun 2006, 21:23
Ich hab grad gemerkt, dass mein Code eh falsch war und ich das Array sowieso nicht kopieren kann.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: Zurückgeben von Arrays

  Alt 19. Jun 2006, 00:20
ü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)
procedure blah(eingabe:string; var ausgabe:array of char); Gruß Frank
  Mit Zitat antworten Zitat
chaoslion

Registriert seit: 1. Mär 2006
52 Beiträge
 
#8

Re: Zurückgeben von Arrays

  Alt 19. Jun 2006, 06:48
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];
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: Zurückgeben von Arrays

  Alt 19. Jun 2006, 07:23
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.

PS: /me würde es so machen
Move(eingabe[1], ausgabe[0], Length(eingabe));
$2B or not $2B
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Zurückgeben von Arrays

  Alt 19. Jun 2006, 08:33
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.
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