AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Verhält sich "Result" wie eine globale Variable??

Verhält sich "Result" wie eine globale Variable??

Ein Thema von BloodySmartie · begonnen am 9. Jan 2008 · letzter Beitrag vom 10. Jan 2008
Antwort Antwort
Seite 1 von 3  1 23   
BloodySmartie
(Gast)

n/a Beiträge
 
#1

Verhält sich "Result" wie eine globale Variable??

  Alt 9. Jan 2008, 16:01
Hallo liebe Community!

Ich dachte eigentlich schon, wenigstens den Mechanismus von einfachen Funktionen in Delphi grundlegend verstanden zu haben. Nun allerdings hat es mich überrascht, dass das Result einer Funktion mit Rückgabetyp 'string' sich so verhält wie eine globale Variable: Der Inhalt von Result bleibt beim zweiten Aufruf erhalten.

Kann mir jemand erklären, warum? Und wozu das gut ist? Meine heile Welt ist gerade zerbrochen
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Verhält sich "Result" wie eine globale Variabl

  Alt 9. Jan 2008, 16:02
Pure coincidence. "Result" ist eine implizite lokale Variable, die den Rückgabewert der Funktion beschreibt. Wenn der zwischen zwei Aufrufen gleich bleibt, hast du einfach nur Glück gehabt.
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#3

Re: Verhält sich "Result" wie eine globale Variabl

  Alt 9. Jan 2008, 16:03
Hallo,

bleibt der Inhalt erhalten oder liegt die Variable zufällig auf dem gleichen Speicherplatz?
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#4

Re: Verhält sich "Result" wie eine globale Variabl

  Alt 9. Jan 2008, 16:05
Zitat von BloodySmartie:
Hallo liebe Community!

Ich dachte eigentlich schon, wenigstens den Mechanismus von einfachen Funktionen in Delphi grundlegend verstanden zu haben. Nun allerdings hat es mich überrascht, dass das Result einer Funktion mit Rückgabetyp 'string' sich so verhält wie eine globale Variable: Der Inhalt von Result bleibt beim zweiten Aufruf erhalten.

Kann mir jemand erklären, warum? Und wozu das gut ist? Meine heile Welt ist gerade zerbrochen
Ähm,

Beim zweiten Aufruf von was? Der Funktion? Na wenn das Ergebnis doch das Gleiche ist?
Oder ein zweiter Zugriff innerhalb der Funktion? Ja, denn für die Funktion ist Result erstmal nichts anderes als eine lokale Variable innerhalb der Funktion.

Verstehe Deine Frage nicht so ganz.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Verhält sich "Result" wie eine globale Variabl

  Alt 9. Jan 2008, 16:12
Ich würde sagen, er hat eine Funktion einmal im Programm aufgerufen, einen Rückgabewert erhalten und später im Programm die Funktion erneut aufgerufen und diese enthielt immer noch den alten Rückgabewert.

Nun ist seine Frage, ob das Ergebnis in Result global gespeichert wird, da sich der Inhalt dieser "Variable" nicht änderte.

Grüße
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
BloodySmartie
(Gast)

n/a Beiträge
 
#6

Re: Verhält sich "Result" wie eine globale Variabl

  Alt 9. Jan 2008, 16:14
Also passt mal auf: Ich habe nur ein wenig rumgespielt und war dabei zu faul, mir eine zusätzliche lokale Variable zu deklarieren. Um meine Rückgabe zusammenzusetzen, benutzte ich daher result:

Delphi-Quellcode:
function getStringfromCharArr(ca:array of char):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;
Wenn nun beim Ersten Aufruf in ca "'b','i','n',' '" stand, und beim Zweiten "'i','c','h',' ','d','o','o','f'", gab die Funktion am Ende den String "bin ich doof" zurück.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#7

Re: Verhält sich "Result" wie eine globale Variabl

  Alt 9. Jan 2008, 16:16
Tut mir leid, aber ich blicke das nicht...

Angenommen ich habe folgende Funktion:
Delphi-Quellcode:
Function MachMaPlus(a,b: Integer): String;
Begin
   Result := '';

   Result := IntToStr(a+b);
End;
und rufe diese so auf:
MachMaPlus(6,7); Dann liefert diese Funktion mir 13 als String - egal ob ich das heute, morgen oder in 20 Jahren aufrufe.
Was ist das für eine Frage, ob das global gespeichert wird?
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#8

Re: Verhält sich "Result" wie eine globale Variabl

  Alt 9. Jan 2008, 16:18
Result ist eine lokale Variable, und ihr Gültigkeitsbereich endet beim Verlassen der Funktion. Dass beim zweiten Aufruf der Funktion die Variable oft wieder auf den selben Speicherbereich fällt, ist ganz normal. Speicherreservierung ist ja keine völlig wahlfreie Zufallsangelegenheit. Das heißt aber nicht, dass man damit irgend etwas machen könnte. Eine Variable ist nur innerhalb ihres Gültigkeitsbereichs definiert, und sie enthält nur dann verwertbare Daten, wenn sie initialisiert wurde. Lass dich nicht davon täuschen, wenn zufällig noch alte Daten dort stehen, es könnte genausogut auch etwas völlig anderes sein.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#9

Re: Verhält sich "Result" wie eine globale Variabl

  Alt 9. Jan 2008, 16:19
Nochwas, wenn Du ein Array als Argument übergibst, dann solltest Du Dir daraus einen Type bauen!

Edit: RS.
  Mit Zitat antworten Zitat
BloodySmartie
(Gast)

n/a Beiträge
 
#10

Re: Verhält sich "Result" wie eine globale Variabl

  Alt 9. Jan 2008, 16:21
Okay, also mal anders:

Delphi-Quellcode:
var
s:string;
a:array of char[2];

begin
a[0]:='1';
a[1]:='1';
s:=getStringfromCharArr(a);
//s enhält an dieser Stelle '11'
//weiter...
a[0]:='2';
a[1]:='2';
s:=getStringfromCharArr(a);
//Ich hätte nun erwartetn, dass in s '22' steht. - "Neuer Funktionsaufruf, neues Glück."
//Stattdessen steht darin aber '1122'.
end.
Vielleicht isses jetzt besser verständlich.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:40 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