Przekazywanie parametrów
Standardowe przekazywanie parametrów Mo¿na przekazywaæ dowoln± ilo¶æ parametrów do funkcji lub procedury. Oddziela siê je ¶rednikami. Ka¿dy z parametrów ma w³asny typ. Zmienne podawane zazwyczaj w parametrach s± kopiowane w inny obszar pamiêci i w³a¶nie do tego obszaru ma dostêp programista. Poniewa¿ komputer wykonuje kopiê parametrów, nie nale¿y przekazywaæ zbyt du¿ej ilo¶ci danych, by nie spowolniæ dzia³ania programu. Zaleca siê przekazywaæ do o¶miu bajtów.
Przekazanie przez referencjê Gdy przekazujemy parametry do funkcji lub procedury, mo¿e zaj¶æ potrzeba zmiany wielko¶ci jakiego¶ parametru. Wtedy trzeba omin±æ mechanizm tworzenia kopii parametru, by pracowaæ na orginalnej zmiennej. U¿ywa siê do tego s³owa kluczowego var. Teraz zmiana parametru wewn±trz funkcji, zmieni go tak¿e na zewn±trz.
var tmp : string;
procedure WczytajNapis(var s : string);
begin
WriteLn('Prosze podac napis');
ReadLn(s);{wczytujemy do zmiennej na zewn±trz}
end;
procedure WczytajNapisBezVar(s : string);
begin
WriteLn('Prosze podac napis');
ReadLn(s); {Wczytujemy do kopii zmiennej}
end;
begin
tmp := 'Ala ma kota';
WczytajNapisBezVar(tmp); {nazwa tmp mo¿e byæ inna ni¿ w nag³ówku procedury}
WriteLn(tmp); {tmp dalej ma warto¶æ Ala ma kota pomimo zmian wewn±trz procedury}
WczytajNapis(tmp);
WriteLn(tmp); {Teraz tmp bêdzie takie jakie wczytano z klawiatury}
end.
Gdyby¶my nie u¿yli s³owa kluczowego var przed podaniem parametru s: string, pracowaliby¶my na kopii zmiennej podanej do procedury. Wtedy zmienienie jej wewn±trz procedury nie mia³oby znaczenia po powrocie do normalnego programu. Zmienna tmp dalej mia³aby t± warto¶æ co przed wywo³aniem procedury.
Przekazanie parametru przez sta³± Gdy przekazujemy do procedury lub funkcji du¿e ilo¶ci danych, np. napisy, czyli typ string, komputer wykonuje kopiê napisu, 256 bajtów. Dla dzisiejszych komputerów to nie du¿o, ale gdyby taka procedura wykonywa³a siê milion razy w ci±gu sekundy, spowodowa³aby du¿e spowolnienie z powodu niepotrzebnego kopiowania pamiêci. Dlatego w³a¶nie mo¿na przekazywaæ dane za pomoc± s³owa kluczowego const. Spowoduje to przekazanie jedynie adresu pamiêci, w którym jest zmienna. Niestety program nie pozwoli nam na edycjê parametru, bo nie pracujemy na kopii.
var tmp : string;
procedure WyswietlString(const s : string); {przekazanie parametru przez const}
begin
WriteLn('Napis to ', s);
end;
begin
tmp := 'Ala ma kota';
WyswietlString(tmp);
end.
Przekazywanie parametru przez wska¼nik (pointer) Przekazanie zmiennej za pomoc± wska¼nika oznacza, ¿e do procedury przesy³amy adres pamiêci, w której bêdzie interesuj±ca warto¶æ. Wi±¿e siê to równie¿ z pewnym ryzykiem. Przekazuj±c b³êdny adres dzia³anie programu zostanie przerwane przez system.
Temat wska¼ników zosta³ obja¶niony w rozdziale struktur danych.