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

  1. arvoparametreina, ohjelma tulostaa 2, 2
  2. value-result-parametreina, ohjelma tulostaa 2, 3
  3. viiteparametreina, ohjelma tulostaa 3, 3
  4. 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

  1. arvoparametreina, ohjelma tulostaa 7, 7, 8
  2. value-result-parametreina, ohjelma tulostaa 7, 99, 8
  3. viiteparametreina, ohjelma tulostaa 7, 99, 8
  4. nimiparametreina, ohjelma tulostaa 8, 7, 99


Takaisin sisältösivulle.