Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion mit 2 Zahlen (https://www.delphipraxis.net/87428-funktion-mit-2-zahlen.html)

Kedariodakon 28. Feb 2007 20:46

Re: Funktion mit 2 Zahlen
 
Zitat:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.
Seite 3 von 3     123   

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