Hi!
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
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
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
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