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 Eine Function ein Array liefern lassen (https://www.delphipraxis.net/42338-eine-function-ein-array-liefern-lassen.html)

mojo777 17. Mär 2005 12:14


Eine Function ein Array liefern lassen
 
Hallo, ist es eigentlich in delphi möglich eine funktion ein array liefern zu lassen?
bisher habe ich immer irgendeine notlösung entwickelt, doch vielleicht weiss jemand rat. :-)

also ich meine soetwas wie
Delphi-Quellcode:
function gibmirfive (variable:String):array of Integer;
denke im voraus.

mojo

ste_ett 17. Mär 2005 12:36

Re: Eine Function ein Array liefern lassen
 
Erstelle dir einfach einen neuen Typ.

Delphi-Quellcode:
type
  TMyIntArary: array of Integer;

und dann

function gibmirfive (variable:String): TMyIntArray;

mojo777 17. Mär 2005 12:46

Re: Eine Function ein Array liefern lassen
 
ahaaahh!!
ok danke!

ste_ett 17. Mär 2005 12:58

Re: Eine Function ein Array liefern lassen
 
Bei Rückgabe von Arrays durch Funktionen ist es nicht garantiert, dass der Speicherbereich, in dem der Array liegt, unberührt bleibt, da dieser nach Beenden der Funktion wieder von anderen Programmteilen nutzbar ist.

Besser wäre da:

Delphi-Quellcode:
procedure gibmirfive (variable:String; var MyIntArray: array of integer);

Aufruf per:

gibmirfive('String', ArrayName);

statt

ArrayName := gibmirfive('String');

mojo777 17. Mär 2005 13:11

Re: Eine Function ein Array liefern lassen
 
ja. das ist dann aber wieder die art der notlösung, die ich bisher benutzt habe. quasi eine aussen leigene variable als array in der procedure bearbeiten und dann von woanders verweden...
aber klappt es denn auch wenn der zugriff units/classen übergreifend erfolgt?

ste_ett 17. Mär 2005 13:38

Re: Eine Function ein Array liefern lassen
 
Warum sollte das nicht gehen? :)

Airblader 17. Mär 2005 13:55

Re: Eine Function ein Array liefern lassen
 
@ste_ett

Kenne mich nun nciht so aus, aber:

Angenommen ich gebe TMyIntArray zurück.
Gut, vielleicht wird es dann überschrieben, aber einmal wird es ja 100% zurückgegeben, sonst könnte bei jeder Rückgabe ja Fehler entstehen.

Wenn ich dann MyArray := GiveMeTheArray(xxx); mache, wird die Rückgabe ja sowieso einem neuem Array ( MyArray ) zugestellt und somit ist es ja egal, ob die Rückgabe wieder überschrieben wird, oder?

air

malo 17. Mär 2005 15:16

Re: Eine Function ein Array liefern lassen
 
Zitat:

Zitat von Airblader
@ste_ett

Kenne mich nun nciht so aus, aber:

Angenommen ich gebe TMyIntArray zurück.
Gut, vielleicht wird es dann überschrieben, aber einmal wird es ja 100% zurückgegeben, sonst könnte bei jeder Rückgabe ja Fehler entstehen.

Wenn ich dann MyArray := GiveMeTheArray(xxx); mache, wird die Rückgabe ja sowieso einem neuem Array ( MyArray ) zugestellt und somit ist es ja egal, ob die Rückgabe wieder überschrieben wird, oder?

air

Und was ist, wenn man die Werte auslesen will und mit einzelnen Werten arbeiten möchte? Also nicht mit dem ganzen Array, sondern nur mit einzelnen Indexen. Klar, man könnte dann natürlich das ganze Array vorher abspeichern, aber ist doch immer praktisch, wenn es ohne diesen Umweg ginge ;)

Airblader 17. Mär 2005 15:19

Re: Eine Function ein Array liefern lassen
 
@malo

naja, aber wenn man eina rray zurückgibt muss man ja sowieso mit indexen arbeiten, oder halt die arrayelemente mit entspr. index in einer neuen variablen ablegen :stupid:

moritz 17. Mär 2005 15:21

Re: Eine Function ein Array liefern lassen
 
Zitat:

Zitat von ste_ett
Bei Rückgabe von Arrays durch Funktionen ist es nicht garantiert, dass der Speicherbereich, in dem der Array liegt, unberührt bleibt, da dieser nach Beenden der Funktion wieder von anderen Programmteilen nutzbar ist.

Besser wäre da:

Delphi-Quellcode:
procedure gibmirfive (variable:String; var MyIntArray: array of integer);

Aufruf per:

gibmirfive('String', ArrayName);

statt

ArrayName := gibmirfive('String');

Falsch. In der Funktion, die diese Funktion aufruft, ist für die Rückgabevariable ja ein Speicher definiert. Und dieser bleibt erhalten.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 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