Thema: Delphi Funktion mit 2 Zahlen

Einzelnen Beitrag anzeigen

Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: Funktion mit 2 Zahlen

  Alt 28. Feb 2007, 20:46
Zitat von dominikkv:
das schlüsselwort const bedeutet nur das du a und b nicht mehr verändern kannst (in deiner function), also zB a := 4 wäre dann nicht mehr möglich...du übergibst den wert constant.
und bei jedem functionsaufruf wird a und b neu angelegt und hat nix mit dem "alten" a und b zu tun
ok...

Wenn nichts angegeben wird:
Delphi-Quellcode:
procedure Machwas( a, b: Integer )
{...}
Ist es Call by Value, sprich beim aufruf der Funktion wird für a und b neuer Speicher angelegt und die übergebenen Werte werden dahin kopiert...
Inerhalb der Methode kann man sogar a und b verändern, ohne das dies außerhalb Auswirkungen hat...
Sprich es wär in der Methode z.B. möglich: a := 56;...

Wenn man z.b. nun einen String übergibt, wird der String auch komplett nochmal erstellt und kopiert!




Wenn nun aber Const angegeben wird:
Delphi-Quellcode:
procedure Machwas( Const a, b: Integer )
{...}
Ist es Call by Referenz, sprich es wird nur die Stelle im Speicher übergeben, man greift in der Methode also direkt auf den übergebenen Wert zu, welchen man übergeben hat! Aber! das Schlüsselwort Const verbietet eine Veränderung, sprich a := 56; ist nicht möglich...
Vorteil hat das aber wenn man mit z.B. mit Strings arbeitet! Da werden z.B. die Strings nicht neu angelegt! Was an vielen Stellen viel Performance ausmachen kann...




Wenn nun dagegen Var angegeben wird:
Delphi-Quellcode:
procedure Machwas( Var a, b: Integer )
{...}
Ist es auch Call by Referenz, sprich es wird nur die Stelle im Speicher übergeben, man greift in der Methode also direkt auf den übergebenen Wert zu, welchen man übergeben hat! Aber, wenn man nun den Wert in der Methode verändert: a := 56; ist der Wert nach der Methode außerhalb auch verändert!




Als letztes bleibt noch Out...
Delphi-Quellcode:
procedure Machwas( Out a, b: Integer )
{...}
Hier trifft eigendlich das selbe zu wie beim Schlüsselwort Var, aber man kann auf a und b nicht in der Methode lesend zugreifen, also sowas wie a * b wäre nicht möglich....


So ich hoffe ich hab das alles richtig erklärt =)

Bye Christian
Christian
  Mit Zitat antworten Zitat