Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ist das ein wertparameter (https://www.delphipraxis.net/38785-ist-das-ein-wertparameter.html)

adi_svadi 24. Jan 2005 06:12


ist das ein wertparameter
 
ist sender ein wertparameter?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var f:TextFile;
    i:Integer;
begin
  AssignFile(f,'c:\test.txt');
  ReWrite(f);
  for i:=0 to Memo1.Lines.Count-1 do
    WriteLn(f,Memo1.Lines[i]);
  closeFile(f);
end;
[edit=Luckie]Delphi-Tags ([ delphi] ... [ /delphi] ohne Leerzeichen) eingefügt. Beim nächten Mal bitte selber machen. Danke. Mfg, Luckie[/edit]

toms 24. Jan 2005 06:16

Re: ist das ein wertparameter
 
Ja.

Luckie 24. Jan 2005 06:21

Re: ist das ein wertparameter
 
Was verstehst du unter Wertparameter?

Es gibt call-by-reference und call-by-value. Ersteres bedeute, dass nur eine Referenz auf die Speicheradresse übergeben wird. Das heißt, wird dieser Parameter in der Routine geändert, wird er er direkt an der Speicheradresse geändert und bleibt logischerweise nach verlassen der Routine geändert. zweiteres bedeute, dass eine Kopie der Variablen als Parameter übergeben wird. Eine Änderung hat also keinen Einfluss auf den ursprünglichen Wert.
Beispiel:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
//
//  foo1
//    call-by-reference
//
procedure foo1(var i: Integer);
begin
  i := 5;
end;

////////////////////////////////////////////////////////////////////////////////
//
//  foo2
//    call-by-value
//
procedure foo2(i: Integer);
begin
  i := 5;
  ShowMessage(IntToStr(i));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  d: Integer;
begin
  d := 1;
  foo1(d);
  ShowMessage(IntToStr(d));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  d: Integer;
begin
  d := 1;
  foo2(d);
  ShowMessage(IntToStr(d));
end;

Binärbaum 24. Jan 2005 08:12

Re: ist das ein wertparameter
 
Ich glaube, adi_svadi meint mit Wertparameter das, was Luckie als call-by-value bezeichnet.
call-by-reference ist dann ein Referenzparameter.
Bei Referenzparametern steht immer das Schlüsselwort var, bei Wertparametern nicht.

MfG
Binärbaum

Sharky 24. Jan 2005 08:41

Re: ist das ein wertparameter
 
Zitat:

Zitat von Binärbaum
...Bei Referenzparametern steht immer das Schlüsselwort var, bei Wertparametern nicht....

Hai,
was für ein Parametertyp ist denn sl in meiner Procedure blubb ;-)
Delphi-Quellcode:
procedure blubb (sl : TStringList);
begin
  sl.Add('foo');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  slist : TStringList;
begin
  slist := TStringList.Create;
  try
    slist.Add('meow');
    blubb (slist);
  finally
    slist.Free;
  end;
end;

Luckie 24. Jan 2005 08:42

Re: ist das ein wertparameter
 
Referenz-Parameter (oder wie man es nennen will), da Objekte automatisch als Refernz übergeben werden. ;)

Sharky 24. Jan 2005 08:44

Re: ist das ein wertparameter
 
Zitat:

Zitat von Luckie
Referenz-Parameter (oder wie man es nennen will), da Objekte automatisch als Refernz übergeben werden. ;)

Ich weiss ;-)

Ich wollte nur zeigen das es nicht von dem Var beim Parameter alleine abhängig ist :stupid:

Luckie 24. Jan 2005 08:45

Re: ist das ein wertparameter
 
Ach ich kleines Dummerchen :angel: und ich dachte, es wäre eine ernsthafte Frage von dir gewesen. :roll:

maximov 24. Jan 2005 14:59

Re: ist das ein wertparameter
 
Zitat:

Zitat von Sharky
Ich wollte nur zeigen das es nicht von dem Var beim Parameter alleine abhängig ist :stupid:

... zumal es auch noch const und out gibt :cyclops:

Chewie 24. Jan 2005 17:40

Re: ist das ein wertparameter
 
Zitat:

Zitat von Sharky
Hai,
was für ein Parametertyp ist denn sl in meiner Procedure blubb ;-)

Naja, deine Variable sl wird schon als Wert nicht als Referenz übergeben, es wird also eine Kopie davon angelegt.
ABER: Da sl nur ein Zeiger ist, wird einfach ein Zeiger kopiert.

Trotzdem erfolgt der Aufruf by-Value.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 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 by Thomas Breitkreuz