Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wieder ein Variablen Problem - komme nicht weiter. (https://www.delphipraxis.net/121566-wieder-ein-variablen-problem-komme-nicht-weiter.html)

Eos-PVU 30. Sep 2008 15:49

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Hi!

Zitat:

Zitat von AlexII
Aber FiCountCorrect, jkeins, jkzwei sind doch nicht constant oder wie meinst du das?

Es geht dabei um die Art, wie Werte an eine Prozedur übergeben werden. Die Werte werden nämlich auf den Stack gepackt:

Bei
Delphi-Quellcode:
procedure foo (bar: tbar);
wird die komplette Variable "bar" auf den Stack gepackt. Änderungen an "bar" sind innerhalb der Prozedur möglich, wirken aber nur auf die lokale Kopie. Beim Aufruf von "foo" können auch Konstanten (const-Deklarierte Werte) und Literale (Werte im Quelltext wie 1 oder 'foobar') übergeben werden.
Braucht bei komplexen Typen, z.B. Records, viel Stackspeicher.

Bei
Delphi-Quellcode:
procedure foo (var bar: tbar);
wird eine Referenz (Pointer) auf die Variable übergeben. Änderungen von "bar" innerhalb der Prozedur verändern die beim Aufruf angegebene Variable. Die Übergabe von Konstanten und Literalen ist natürlich nicht möglich.
Braucht nur einen Pointer auf dem Stack.

Bei
Delphi-Quellcode:
procedure foo (const bar: tbar);
wird ebenfalls eine Referenz (Pointer) auf die Variable übergeben. Änderungen von "bar" innerhalb der Prozedur werden vom Compiler verhindert. Die Übergabe von Konstanten und Literalen ist möglich.
Braucht nur einen Pointer auf dem Stack und spart deshalb bei komplexen Typen gegenüber der ersten Variante viel Speicherplatz.
Bei Integer besteht kein Unterschied.

Werte, die in einer Prozedur/Funktion nicht geändert werden (das ist bei Deinen Werten FiCountCorrect, jkeins, jkzwei der Fall) übergebe ich immer als const - eine versehentliche Zuweisung läßt sich dann gar nicht compilieren. das "const" könnte hier auch weggelassen werden.

Gruß

Eos-PVU


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:54 Uhr.
Seite 4 von 4   « Erste     234   

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