Oppimateriaalin copyright © 2011 Arto Wikla.
Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille
opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin,
kuten kaupallisilla tai muilla kursseilla, on kielletty.
(Muutettu viimeksi 9.3.2011)
Parametrityypeistä
Tarkastellaan seuraavaa esimerkkiä
(Scott Ex. 8.11 ja 8.14):
program Parametreja1 {
int x;
procedure ali(y: int) { // tänne siis näkyy myös ulomman lohkon x
y := 3;
print(x);
}
// pääohjelma:
x := 2;
ali(x);
print(x);
}
Kun parametrit välitetään
- arvoparametreina,
ohjelma tulostaa 2, 2
- value-result-parametreina,
ohjelma tulostaa 2, 3
- viiteparametreina,
ohjelma tulostaa 3, 3
- nimiparametreina,
ohjelma tulostaa 3, 3.
Tässä ei vielä nähty eroa viite- ja nimiparametrin tapauksessa.
Mutta kun otetaan vaikka taulukon indeksointi todelliseen
parametriin, havaitaan, miten aliohjelman viittaus muodolliseen
parametriin johtaa indeksin laskentaan kutsuneen
ohjelman viittausympäristössä:
program Parametreja2 {
int i;
array of int t;
procedure ali(y: int) { // tänne siis näkyy myös ulomman lohkon i ja t
i := 2;
print(y);
y := 99;
}
// pääohjelma:
t[1] := 7;
t[2] := 8;
i := 1;
ali(t[i]);
print(t[1], t[2]);
}
Kun parametrit välitetään
- arvoparametreina,
ohjelma tulostaa 7, 7, 8
- value-result-parametreina,
ohjelma tulostaa 7, 99, 8
- viiteparametreina,
ohjelma tulostaa 7, 99, 8
- nimiparametreina,
ohjelma tulostaa 8, 7, 99
Takaisin sisältösivulle.