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