Yleistä
Muuttujiin talletaan talletetaan tiedot, joita ohjelma käsittelee. Tieto voi olla lukuja ja merkkejä, tieto voi olla esitetty yksittäinä arvoina tai taulukkomuodossa.
Muuttujan määritteleminen tapahtuu seuraavasti:
No Format |
---|
tyyppi muuttujan_nimi; |
, missä tyyppi
on tiedon tyyppi ja muuttujan_nimi
on muuttujan nimi.
Esimerkiksi yhden kokonaislukumuuttujan määritteleminen:
Code Block |
---|
int muuttuja1; |
Muuttujan tyyppi
Muuttujat ovat siis tietovarastoja, tietovarastot ovat erilaiselle tiedolle erikokoisia.
Siksi C-kielessä tiedolla on aina tyyppi, tyyppi kertoo muuttujan tarvitseman muistin määrän. Tietokoneen muistia kuvataan tavuilla. Tavun pituus on kahdeksan bittiä. Kahdeksalla bitillä voidaan kuvata luvut 0...255 tai -128...+127.
Esimerkiksi ASCII-taulukossa, joka sisältää tietokoneen esittämät merkit, jokainen kirjoitettava merkki edustaa lukua 0...255. Täten yksi merkki varaa tietokoneelta muistia yhden tavun. (Unicode-merkistössä merkit esitetään kahdella tavulla, jolloin voidaan esittää 65535 erilaista merkkiä, jolloin miltei kaikki maailman merkit saadaan esitettyä ilman erillisiä kooditaulukoita)
...
Muuttuja voi olla käytettävissä ainoastaan ohjelmalohkossa, yhdessä funktiossa (paikallinen), yhdessä tiedostossa tai koko ohjelmassa. Riippuen siitä missä kohtaa ohjelmaa muuttuja esitellään, sitä voidaan käyttää ohjelmassa eri tavoin.
Yhteinen
...
muuttuja (global variable)
Yhteinen, tai globaali, public muuttuja esitellään kaikkien funktioiden ulkopuolella ja se "näkyy" eli se on käytettävissä kaikissa funktioissa, jotka ovat samassa tiedostossa kuin muuttuja. Yhteistä muuttujaa on hyvin helppo käyttää, koska sen arvoon päästään käsiksi kaikista funktioista. Kun ohjelma kasvaa suureksi, siinä voi olla tuhansia muuttujia, jolloin yhteisten muuttujien käyttö tulee hankalaksi ja ohjelmasta tulee altis virheille.
Code Block |
---|
#include <stdio.h>
int x=0; // Yhteinen (globaali) muuttuja
int y=0; // Yhteinen (globaali) muuttuja
int main()
{
return 1;
}
|
Paikallinen
...
muuttuja (local
...
variable)
Paikallinen muuttuja esitellään ohjelmalohkon (tai funktion) sisällä ja se on käytettävissä ainoastaan siinä lohkossa, jossa se on määritelty. Alkuarvokseen paikallinen muuttuja saa satunnaisarvon, siksi paikalliset muuttujat tulee alustaa johonkin alkuarvoon esittelyn yhteydessä.
Paikallinen muuttuja katoaa (ja siten kadottaa arvonsa), kun ohjelmalohko (tai funktio) päättyy.
Esimerkki ohjelmalohkon funktion paikallisesta muuttujasta:
Code Block |
---|
intfloat mainfunktio() { intfloat if; // Main-funktionFunktion paikallinen muuttuja printf("Anna liukuluku: "); scanf("%f", &f); for (i=0; i<100; i++) { printf("Annoit luvun %.2f\n", f); return f; } int main() { int i; float fa=0.0; // ForMain-toistorakenteen sisäinenfunktion paikallinen muuttuja for printf("Anna liukuluku: ");(i=0; i<100; i++) { scanf("%f", &fa=funktio(); printf("Annoita luvun %.2f\non %f", fa); } return i; } |
Esimerkki funktion ohjelmalohkon paikallisesta muuttujasta:
Code Block |
---|
voidint funktiomain() { int i; // Main-funktion paikallinen muuttuja for float f; (i=0; i<100; i++) { float f; // For-toistorakenteen Funktionsisäinen paikallinen muuttuja printf("Anna liukuluku: "); scanf("%f", &f); printf("Annoit luvun %.2f\n", f); } } |
Samannimiset muuttujat
Ohjelmassa ei saa olla saman nimisiä muuttujia, paitsi jos ne on määritelty eri näkyvyysalueelle. Eli ohjelmassa voi olla globaali muuttuja int x
sekä myös mainissa muuttuja int x
. Tämä on sallittua, tosin ei suositeltavaa ilmiselvän sekaannusvaaran takia.
Code Block |
---|
#include <stdio.h> int x = 5; main() { int i; // Main-funktion paikallinen muuttuja Globaali muuttuja int main() { int forx (i=0; i<100; i++) { -100; // Main-funktion paikallinen muuttuja funktio(printf("x = %d\n", x); } |
Minkä arvon ohjelma tulostaa?
No Format |
---|
Vastaus: x = } } -100 |
Jos ohjelmassa on saman nimisiä muuttujia, viitataan aina 'lähinnä olevaan' eli rajatuimmalla näkyvyydellä olevaan.
Merkkijonot
Merkkijono on vektori eli yksiulotteinen taulukko. C-kielessä ei merkkijonoille ole valmista muuttujaa, vaan merkkijonot on esiteltävä vektoreina seuraavasti:
...