...
Code Block |
---|
void KartionTilavuus()
{
float Sade, Korkeus, Tilavuus; // esitellään funktion paikalliset muuttujat
system("cls"); // putsataan ruutu
printf("Lasken kartion tilavuuden"); // annetaan ohjeita käyttäjälle
printf("Anna pohjan säde:");
scanf("%f", &Sade); // kysytään tietoa käyttäjältä
printf("Anna korkeus:");
scanf("%f", &Korkeus);
Tilavuus = 3.14159 * Sade*Sade*Korkeus/3; // lasketaan ja sijoitetaan
printf("Tilavuus on %5.2f", Tilavuus);
}
|
Edellinen ohjelma laskee kartion tilavuuden ja tulostaa tiedot ruudulle, muttei pysty välittämään tietoa muille funktioille. Muuttujat Sade
, Korkeus
ja Tilavuus
ovat tämän funktion paikallisia muuttujia (kts. seuraava kohta).
Funktion
...
kutsuminen
Funktiota kutsutaan muodossa funktion_nimi() ja sulkujen sisään tulevat mahdolliset parametrit.
Esim funktion kutsuminen pääohjelmasta:Kaikilla funktiolla voi olla omia paikallisia (local) muuttujia. Lisäksi funktiolla voi olla parametreja, joiden avulla funktiolle välitetään tietoa sen ulkopuolelta. Parametrit eroavat paikallisista muuttujista siinä, että niille on annettu alkuarvo funktion kutsussa.
Code Block |
---|
voidint funktiomain(int x) { int y; // ...pääohjelma } |
x
on funktion parametri jay
funktion paikallinen muuttuja. On huomattava, että parametrit ja paikalliset muuttujat eivät näy funktion ulkopuolelle eivätkä siten ole käytettävissä muualla kuin funktiossa itsessään.- On myös tärkeää huomata, että eri funktioissa voi olla samannimisiä muuttujia ja ne ovat toisistaan täysin riippumattomia.
Funktion kutsuminen
Funktiota kutsutaan muodossa funktion_nimi() ja sulkujen sisään tulevat mahdolliset parametrit.
Esim funktion kutsuminen pääohjelmasta:
Code Block |
---|
int main() // pääohjelma
{
KartionTilavuus(); // funktion kutsu
getch(); // jäädään odottamaan, että käyttäjä painaa jotain nappulaa
}
|
Note |
---|
Funktiota voidaan kutsua sen mistä tahansa ohjelmasta, myös funktiosta itsestään (vrt. rekursio). |
...
{
KartionTilavuus(); // funktion kutsu
getch(); // jäädään odottamaan, että käyttäjä painaa jotain nappulaa
}
|
Note |
---|
Funktiota voidaan kutsua sen mistä tahansa ohjelmasta, myös funktiosta itsestään (vrt. rekursio). |
Funktion parametrit ja paikalliset muuttujat
Kaikilla funktiolla voi olla omia paikallisia (local) muuttujia. Lisäksi funktiolla voi olla parametreja, joiden avulla funktiolle välitetään tietoa sen ulkopuolelta. Parametrit eroavat paikallisista muuttujista siinä, että niille on annettu alkuarvo funktion kutsussa.
Code Block |
---|
void funktio(int x)
{
int y;
...
}
|
x
on funktion parametri jay
funktion paikallinen muuttuja. On huomattava, että parametrit ja paikalliset muuttujat eivät näy funktion ulkopuolelle eivätkä siten ole käytettävissä muualla kuin funktiossa itsessään.- On myös tärkeää huomata, että eri funktioissa voi olla samannimisiä muuttujia ja ne ovat toisistaan täysin riippumattomia.
Anchor esim2 esim2
Esimerkki 2
Code Block |
---|
void TulostaMerkki(char Merkki) |
...
Esimerkki 2
Code Block |
---|
void TulostaMerkki(char Merkki) // funktion parametrina char tyyppinen muuttuja { printf("Antamasi merkki oli %c", Merkki); // tulostetaan annettu merkki %c:n osoittamaan kohtaan } int main() { char JokinMerkki = 'a'; // esitelläänfunktion muuttuja,parametrina nytchar paikallisena, nyt muutuja näkyy vain tässä funktiossa TulostaMerkki(JokinMerkki); // Funktio saa parametrinaan JokinMerkki muuttujan arvon getch();tyyppinen muuttuja { printf("Antamasi merkki oli %c", Merkki); // tulostetaan annettu merkki %c:n osoittamaan kohtaan } int main() { return 1; } |
...
Esimerkki 3
Code Block |
---|
void LaskeYhteen(int Eka, int Toka) { char JokinMerkki = 'a'; int Summa// = 0; Summa = Eka + Toka;esitellään muuttuja, nyt paikallisena, nyt muutuja näkyy vain tässä funktiossa printf("\nsumma on %d", Summa); } int main() TulostaMerkki(JokinMerkki); // Funktio saa parametrinaan JokinMerkki muuttujan arvon getch(); return 1; } |
Anchor | ||||
---|---|---|---|---|
|
Esimerkki 3
Code Block |
---|
void LaskeYhteen(int Eka, int Toka) { int Summa //= pääohjelma0; { int FirstSumma = 5, Second = 6Eka + Toka; LaskeYhteen(Firstprintf("\nsumma on %d", SecondSumma); // funktion kutsu, kutsussa ja itse funktiossa muuttujien nimet voivat olla erilaisia! } int main() { LaskeYhteen(4, 6); return 1; } |
Edellä oleva funktio ottaa parametreikseen kaksi kokonaislukua ja sijoittaa ne funktion paikallisiin muuttujiin Eka
ja Toka
. Funktion laskema tulos näytetään ruudulla. Tämä funktio ei palauta mitään tietoa kutsujalle.
...
Funktio ei voi palauttaa merkkijonoja eikä taulukoita, vaan näissä tapuksissa palautetaan aina osoite. Täytyy myös ottaa huomioon, se missä merkkijonolle on varattu muisti. Jos se varataan dynaamisesti, se voidaan tehdä funktiossa, mutta jos se varataa staattisesti (ns. normaalisti), se täytyy varata funktion ulkopuolella, koska funktion paikalliset muuttujat tuhoutuvat funktiosta palattaessa.
...