Delphi-PRAXiS

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ß

malo 17. Mär 2005 15:26

Re: Eine Function ein Array liefern lassen
 
Zitat:

Zitat von Airblader
@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:

Ja. Aber in deinem Beispiel speichert man ja das GANZE Array in einem neuen Array (ihne auf Indexe zu achten) ;)

ste_ett 17. Mär 2005 15:29

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

Ja, es kann theoretisch bei jeder Rückgabe zu Fehlern kommen.
Beim Beenden wird der gesamte Speicher, den diese Funktion genutzt hat, wieder freigegeben zur weiteren Nutzung.
Ob dieser Speicher genau in dem Moment wieder genutzt wird, hängt vom Speicherbedarf des Systems, bzw der laufenden Prozesse, ab.

Bei einem Array bekommst du nur den Pointer auf die Stelle im Speicher. Du speicherst nicht direkt den Inhalt des Arrays. Der Speicherbereich ist offen und kann jederzeit überschrieben werden, wodurch ein Zugriff zu Fehlern führt.


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