Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rückgabewerte von Funktionen und Prozeduren (https://www.delphipraxis.net/6221-rueckgabewerte-von-funktionen-und-prozeduren.html)

CepheidenX 3. Jul 2003 17:19

@Hansa
Ich weis ja nicht was du genau willst.
Aber bei der Übergabe von normalen Parametern in Delphi/Pascal wird (vom compiler, also im Hintergrund) eine neue lokale Variable, also ein Integer oder String ...) für die SubRoutine erzeugt. Wenn Das steuerwort var benutzt wird ist das nicht der Fall.
Naja fast, es wird nur ein Zeiger erzeugt der auf die Variable in der übergeordneten Routine zeigt.
Wie gesagt bekommt der Programmierer davon nichts mit.
Was du mit
Zitat:

Kommst Du etwa aus der falschen Richtung ? Oder ich ?
meinst versteh ich nicht.

Hansa 3. Jul 2003 17:25

ich verstehe das genauso wenig, wie Du. 8) Wenn ich folgenden Code habe:

Delphi-Quellcode:
procedure Test (VAR i : integer);
  begin
    i := 5;
  end;
was steht dann hier drin ? :
Delphi-Quellcode:
begin
  showmessage (IntToStr (Test (8));
end;

CepheidenX 3. Jul 2003 17:32

Du meinst wie ShowMessage deklariert ist?
Delphi-Quellcode:
procedure ShowMessage(const Msg: string);
kannst du auch selber nachschauen :-)

Edit: Ich versteh nicht ganz worauf du hinaus willst

Hansa 3. Jul 2003 17:39

Delphi-Quellcode:
unit TestUnit;

Interface

procedure Test (VAR i : integer);

implementation

procedure Test (VAR i : integer);
  begin
    i := 5;
  end;

end;
was steht dann hier drin ? :
Delphi-Quellcode:
program TestProgramm;

uses TestUnit,.....

begin
  showmessage (IntToStr (Test (8));
end;
??????

CepheidenX 3. Jul 2003 17:44

Könntest du dich bitte so ausdrücken das man versteht was du willst?

Irgendwelchen kommentarlosen Quelltext posten nenne ich nicht verständlich oder klar ausdrücken. Und ein "was steht dann hier drin ? :" bringt es auch nicht wirklich. :roll:
Eventuell bin ich ja schwer von Begriff, also hab Verständnis.

Hansa 3. Jul 2003 17:55

Viel einfacher gehts wirklich nicht. :|

Das ist wahrscheinlich eines der kleinsten Programme der Welt. Mir fällt jedenfalls nicht ein, wie es noch kleiner werden könnte. Läßt Du das Programm laufen, was wird dann angezeigt? 5 oder 8 ???

Das ist ein Rätsel, wo die Lösung gleich mitgeliefert wird. :mrgreen:

Chewie 3. Jul 2003 18:01

Es wird gar nichts angezeigt, denn du kannst das Programm nicht kompilieren. InttoStr() erwartet als Parameter einen Integer, die Prozedur gibt aber keinen Integer als Rückgabewert zurück.
Sie hat keinen Rückgabewert.

Hansa 3. Jul 2003 18:08

Zitat:

Zitat von Chewie
... InttoStr() erwartet als Parameter einen Integer, die Prozedur gibt aber keinen Integer als Rückgabewert zurück.

Code:
procedure Test (VAR i : integer);
  begin
    i := 5;
  end;
Wieso ist da kein Rückgabewert ???

CepheidenX 3. Jul 2003 18:08

1. "was steht dann hier drin ? :" Sagt für mich nicht aus, dass ich Dir sagen soll was nach ausführen deines Programm-Codes af dem Bildschirm ausgegeben wird.

2. ist dein Quelltext fehlerhaft! Ausser du bringst Delphi bei, Zahlen als Variablennamen zu interpretieren. Du kannst einer Prozedur die ein Var-Parameter verlangt keinen Zahlenwert übergeben.

Meinen perönlichen Kommentar verkeif ich mir mal. :|

Chewie 3. Jul 2003 18:16

Zitat:

Zitat von Hansa
Code:
procedure Test (VAR i : integer);
  begin
    i := 5;
  end;
Wieso ist da kein Rückgabewert ???

Also gut :mrgreen:

"Rückgabewert" bedeutet, dass die Rückgabe der Funktion nach Ablauf des Programmblocks (=Funktion) in das Register EAX geschrieben wird. Bei einer Funktion ist da was drin, bei einer Prozedurr wird da nichts reingeschrieben.
Ein Var-Parameter ist kein Rückgabewert. Anstatt
Delphi-Quellcode:
procedure Test (VAR i: Integer);
könntest du auch schreiben:
Delphi-Quellcode:
procedure Test (pi: PInteger);
VAR bedeutet, dass nicht der Speicherblock, den die Variable belegt, an die Funktion übergeben wird, sondern nur die Startadresse dieses Blocks. Die Funktion kann anhand dieser Adresse in den Speicherblock der Variablen schreiben, und somit kann sich der Wert derr Variablen ändern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 Uhr.
Seite 2 von 4     12 34      

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