Kaikissa edellisissä esimerkeissämme meillä on ollut vain 0 tai yksi parametriä välitettävänä aliohjelmaan. Käytännössä usein tarvitsemme useampia parametrejä. Esimerkiksi edellisessä paamenu- aliohjelmassa pitäisi oikeastaan tulostaa myös kerhon nimi. Emme vielä kuitenkaan osaa käsitellä merkkijonoja, joten palaamme tähän ongelmaan myöhemmin.
Ottakaamme esimerkiksi mittakaava_muunnos - funktio. Mikäli ohjelma haluttaisiin muuttaa siten, että myös mittakaavaa olisi mahdollista muuttaa, pitäisi myös mittakaava voida välittää muunnos- aliohjelmalle parametrinä. Kutsussa tämä voisi näyttää esim. tältä:
matka_km = mittakaava_muunnos(10000.0,32);
Vastaavasti funktio- esittelyssä täytyisi olla kaksi parametriä:
double mittakaava_muunnos(double mittakaava,int matka_mm) { return matka_mm*mittakaava/MM_KM; }
Kun kutsu suoritetaan, välitetään aliohjelmalle parametrit siinä järjestyksessä, missä ne on esitelty. Voitaisiin siis kuvitella aliohjelmakutsun aiheuttavan sijoitukset aliohjelman parametrimuuttujiin (tosin sijoitusjärjestystä ei taata, eli ei tiedetä kumpi sijoitus suoritetaan ensin):
mittakaava = 10000.0; matka_mm = 32;
Jos kutsu on muotoa
matka_km = mittakaava_muunnos(MITTAKAAVA,matka_mm);
kuvitellaan sijoitukset:
mittakaava = MITTAKAAVA; /* Ohjelman vakio */ matka_mm = matka_mm; /* Pääohjelman muuttuja matka_mm */
Siis vaikka kutsussa ja esittelyssä esiintyykin sama nimi, ei nimien samuudella ole muuta tekemistä kuin mahdollisesti se, että turha on väkisinkään keksiä lyhennettyjä huonoja nimiä, jos kerran on hyvä nimi keksitty kuvaamaan jotakin asiaa.
Parametreistä osa, ei yhtään tai kaikki voivat olla myös osoitteita tai referenssejä.
Huom! Vaikka kaikilla aliohjelman parametreille olisikin sama tyyppi, täytyy jokaisen parametrin tyyppi mainita silti erikseen:
double nelion_ala(double korkeus, double leveys)