![]() |
Re: Verhält sich "Result" wie eine globale Variabl
Zitat:
Wenn der Rückgabewert einer Funktion ein String ist, dann wird der Funktion beim Aufruf die Adresse, an der das Ergebnis der Funktion gespeichert werden soll, mitgegeben. Result ist in diesem Fall also nicht eine lokale Variable der aufgerufenen Funktion, sondern eine Variable der aufrufenden Funktion/Prozedur. Im Prinzip ist das so, als würdest du getStringfromCharArr nicht als Funktion deklarieren sondern als Prozedur mit einem var-Parameter für das Ergebnis, also :
Delphi-Quellcode:
Procedure getStringfromCharArr(ca:array of char: var result:string);
var i,l:integer; begin // result:=''; ---Problemlösung :) l:=length(ca); for I := 0 to l - 1 do begin result:=result+string(ca[i]); end; end; |
Re: Verhält sich "Result" wie eine globale Variabl
Hallo,
Zitat:
Die Funktion
Delphi-Quellcode:
geht unbeanstandet durch den Compiler.
function A(): string;
begin Result := Result + '1'; end; jkr |
Re: Verhält sich "Result" wie eine globale Variabl
Hallo,
Zitat:
Gruß xaromz |
Re: Verhält sich "Result" wie eine globale Variabl
also, im Normalfall verhält sich Result zum Ende der Funktion wie
Delphi-Quellcode:
Function xyz(a: x; b: x; c: x): Typ;
// dieses wird z.B. mehr so behandelt Procedure xyz(a: x; b: x; c: x); Begin End Procedure xyz(out Result: Typ); Strings und die anderen dynamischen Arrays werden allerdings von Delphi besonders behandelt. Diese werden als Erstes mal im gegensatz zu allen anderen Variablen immer Initialisiert und Finalisiert. Außerdem vesucht die CompilerOptimierung immer "dynamische/virtuelle" Variablen mehrfach zu verwenden und nicht immer gleich bei jeder Verwendung neu zu initialisieren/finalisieren. also sieht es für Strings/DynArrays mehr so aus
Delphi-Quellcode:
wobei Result dann global, oder (meistens) lokal in der aufrufenden Funktion/Prozedur definiert ist.
Function xyz(a: x; b: x; c: x): Typ;
// dieses wird z.B. mehr so behandelt Procedure xyz(a: x; b: x; c: x; in Result: Typ); Begin End Procedure xyz(out Result: Typ); Außerdem müssen Variablen immer vom Programmierer initialisert werden (nur weil es Delphi bei Strings im Grunde macht, soll man nicht davon ausgehn, daß es grade zu dem Zeitpunkt extra initialisiert wurde) Zitat:
bei "normalen" Typen (ohne delphieigene Initialisierung) steht Result komplett auf einem Zufallswert (halt das, was vorher von irgendwas an dieser Stelle mal gespeichert wurde) Zitat:
PS: nur globale Variablen werden beim Programmstart mit #0-en initialisiert (bei Strings entspricht dieses '') und Klassenvariablen werden ebenso von Constructor mit #0 initialisert. |
Re: Verhält sich "Result" wie eine globale Variabl
Zitat:
Gruß Jörg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz