TLesiu napisał(a)
co ja tak naprawde przekazałem w parametrze funkcji?
A może Tobie chodzi o to, w jaki sposób przekazywana jest zawartość zmiennej/stałej do procedury/funkcji?
Jeśli tak, to przeczytaj: Kompendium - Typy parametrów przekazywanych do procedur i funkcji - jest tam opisane czym różni się przekazanie przez stałą, przez referencję (działa jak wskaźnik do zewnętrznej zmiennej), przez wartość i za pomocą dyrektywy out
(połączenie const
i var
);
W Twoim przykładzie wykorzystałeś przekazanie przez wartość, więc tablica zostanie skopiowana (@Azarien dokładniej wytłumaczył - dopóki parametr nie jest modyfikowany - nie zostaje skopiowany); Argument działa wtedy na zasadzie lokalnej zmiennej - możesz ją modyfikować, ale zmiany nie zostaną przekazane "wyżej"; Najprostszy przykład:
procedure ChangeString(AString: ANSIString);
begin
AString := 'delphi';
WriteLn(AString);
end;
var
ansiValue: ANSIString = 'pascal';
begin
WriteLn(ansiValue);
ChangeString(ansiValue);
WriteLn(ansiValue);
ReadLn;
end.
W konsoli zostanie wyświetlone:
pascal
delphi
pascal
Jeśli dopiszesz do argumentu dyrektywę var
:
procedure ChangeString(var AString: ANSIString);
to po zmodyfikowaniu argumentu AString
zostanie także zaktualizowana zmienna ansiValue
, w rezultacie w konsoli pojawi się tekst:
pascal
delphi
delphi
W Twoim przypadku jeśli potrzebujesz argument wykorzystać jedynie do odczytu - możesz przekazać argument przez stałą - daje to możliwość lepszej optymalizacji kodu;
Po więcej informacji odsyłam przede wszystkim do kompendium, kursów programowania w delphi, a ostatecznie do Google; Wątek zaś przenoszę do działu dla początkujących, bo dotyczy ścisłych podstaw kodzenia.