Yleistä
Muuttujiin 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 |
---|
Wiki Markup |
h2. Yleistä Muuttujiin talletetaan tiedot, joita ohjelma käsittelee. Tieto voi olla lukuja ja merkkejä, tieto voi olla esitetty yksittäinä arvoina tai [taulukkomuodossa|Taulukot]. Muuttujan määritteleminen tapahtuu seuraavasti: {noformat}tyyppi muuttujan_nimi;{noformat} |
,
...
missä
...
tyyppi
...
on
...
tiedon
...
tyyppi
...
ja
...
muuttujan_nimi
...
on
...
muuttujan
...
nimi.
...
Esimerkiksi
...
yhden
...
kokonaislukumuuttujan
...
määritteleminen:
Code Block |
---|
}int muuttuja1;{code} h2. 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 |
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
...
...
,
...
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)
...
C-kielen
...
muuttujien
...
tyypit
...
ja
...
arvoalueet
...
32
...
bittisessä
...
järjestelmässä:
...
tyyppi | merkitys | tavuja | etumerkitön lukualue | etumerkillinen lukualue |
---|---|---|---|---|
| merkki | 1 | 0...255 |
...
-128...+127 |
...
| lyhyt kokonaisluku | 2 | 0...65536 |
...
-32767...+32768 |
...
| kokonaisluku | 4 | 0...4294967296 |
...
-2147483647...+2147483648 |
...
| pitkä kokonaisluku | 8 | 0...18446744073709551615 |
...
-9223372036854775808...+9223372036854775807 | ||||
| reaaliluku | 4 | - | ? |
| kaksoistarkkuuden reaaliluku | 8 | - | ? |
| tavuosoitin (voidaan ajatella, että tämä ei tarkoita mitään) | - | - | - |
Muuttujan tyyppi kertoo sen, millaista tietoa muuttujaan voi tallentaa, esimerkiksi char OmaMuuttuja
voi tallettaa yhden merkin.
Eli muuttujaan OmaMuuttuja
voidaan sijoittaa yksi merkki, esimerkiksi:
Code Block |
---|
| | {{float}} | reaaliluku | 4 | \- | ? | | {{double}} | kaksoistarkkuuden reaaliluku | 8 | \- | ? | | {{void}} | tavuosoitin (voidaan ajatella, että tämä ei tarkoita mitään) | \- | \- | \- | Muuttujan tyyppi kertoo sen, millaista tietoa muuttujaan voi tallentaa, esimerkiksi {{char OmaMuuttuja}} voi tallettaa yhden merkin. Eli muuttujaan {{OmaMuuttuja}} voidaan sijoittaa yksi merkki, esimerkiksi: {code} char OmaMuuttuja = 'a'; // huom! yksittäiset merkit laitetaan heittomerkkien väliin. {code} |
Toinen
...
esimerkki:
Code Block |
---|
} int Luku = 5; // kokonaislukumuuttuja, joka voi tallettaa etumerkillisen luvun {code} |
Muuttujalle
...
voidaan
...
antaa
...
lisämääreitä:
Määre | Merkitys | Käy seuraaviin tyyppeihin |
---|---|---|
| etumerkillinen | |
| etumerkitön | |
| pitkä | |
| lyhyt | |
Esim.
Code Block |
---|
|| Määre || Merkitys || Käy seuraaviin tyyppeihin || | {{signed}} | etumerkillinen | {{char, int}} | | {{unsigned}} | etumerkitön | {{char, int}} | | {{long}} | pitkä | {{int, double}} | | {{short}} | lyhyt | {{int}} | Esim. {code} unsigned int Luku = 65535; // Muuttuja voi olla ainoastaan positiivinen kokonaisluku {code} h2. Muuttujan nimeäminen Muuttuja kannattaa nimetä selkeällä nimellä, joka kertoo muuttujan käyttötarkoituksen. Huom\! isot ja pienet kirjaimet tarkoittavat eri asiaa. Puhdas C-kielen esittelytapa on seuraava: |
Muuttujan nimeäminen
Muuttuja kannattaa nimetä selkeällä nimellä, joka kertoo muuttujan käyttötarkoituksen. Huom! isot ja pienet kirjaimet tarkoittavat eri asiaa.
Puhdas C-kielen esittelytapa on seuraava:
Code Block |
---|
{code} int auton_nopeus; {code} |
Muuttujan
...
eri
...
sanat
...
voidaan
...
erotella
...
toisistaan
...
esimerkiksi
...
alaviivalla.
...
C++:ssa
...
käytetään
...
tyypillisesti
...
tapaa,
...
jossa
...
muuttujassa
...
olevat
...
sanat
...
aloitetaan
...
isoilla
...
kirjaimilla
...
seuraavasti:
Code Block |
---|
} int AutonNopeus; {code} |
Monet
...
ohjelmoijat
...
liittävät
...
muuttujan
...
eteen
...
kirjaimen
...
kuvaamaan
...
muuttujan
...
tyyppiä
...
seuraavasti:
Code Block |
---|
} int iAutonNopeus; {code} |
Tyypistä
...
otetaan
...
yksi
...
kirjain
...
muuttujan
...
eteen
...
muistuttamaan
...
ohjelmoitsijaa
...
muuttujalle
...
annetusta
...
tyypistä.
...
(tätä
...
sanotaan
...
unkarilaiseksi
...
notaatioksi)
...
Edellä
...
mainitut
...
muuttujien
...
nimeystavat
...
eivät
...
vaikuta
...
millään
...
tapaa
...
muuttujan
...
käyttöön
...
tai
...
ohjelman
...
toimintaan.
...
Muuttujan
...
näkyvyysalue
...
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,
...
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; } {code} h3. Paikallinen muuttuja |
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
...
funktion
...
paikallisesta
...
muuttujasta:
Code Block |
---|
} float funktio() { float f; // Funktion paikallinen muuttuja printf("Anna liukuluku: "); scanf("%f", &f); printf("Annoit luvun %.2f\n", f); return f; } int main() { int i; float a=0.0; // Main-funktion paikallinen muuttuja for (i=0; i<100; i++) { a=funktio(); printf("a on %f",a); } return i; } {code} |
Esimerkki
...
ohjelmalohkon
...
paikallisesta
...
muuttujasta:
Code Block |
---|
} int main() { int i; // Main-funktion paikallinen muuttuja for (i=0; i<100; i++) { float f; // For-toistorakenteen sisäinen paikallinen muuttuja printf("Anna liukuluku: "); scanf("%f", &f); printf("Annoit luvun %.2f\n", f); } } {code} h3. 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 |
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 |
---|
x}}. Tämä on sallittua, tosin ei suositeltavaa ilmiselvän sekaannusvaaran takia. {code} #include <stdio.h> int x = 5; // Globaali muuttuja int main() { int x = -100; // Main-funktion paikallinen muuttuja printf("x = %d\n", x); } {code} |
Minkä
...
arvon
...
ohjelma
...
tulostaa?
No Format |
---|
} Vastaus: x = -100 {noformat} |
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:
Code Block |
---|
} char Sukunimi[100]; {code} |
Merkkijono
...
on
...
tyyppiä
...
char
...
ja
...
merkkijonon
...
perään
...
laitetaan
...
hakasulkuihin
...
merkkien
...
suurin
...
sallittu
...
määrä
...
+1.
...
Viimeinen
...
merkkijonon
...
merkki
...
on
...
varattu
...
lopetusmerkille
...
\0,
...
jonka
...
ascii
...
arvo
...
on
...
nolla,
...
siitä
...
kääntäjä
...
tietää,
...
mihin
...
merkkijono
...
loppuu.
...
Merkkijonon
...
esittelyssä
...
muistista
...
varattu
...
alue
...
ei
...
tyhjene
...
vaan
...
sinne
...
jää
...
aikaisempi
...
sisältö.
...
Merkkijono
...
voidaan
...
alustaa
...
esittelyn
...
yhteydessä:
Code Block |
---|
} char Sukunimi[100] = "Jokunen"; {code} tai |
tai
Code Block |
---|
{code} char Sukunimi[] = "Jokunen"; {code} |
Viimeisessä
...
vaihtoehdossa
...
merkkijonon
...
suurimmaksi
...
sallituksi
...
pituudeksi
...
tulee
...
8
...
eli
...
kun
...
merkkijono
...
alustetaan
...
esittelyn
...
yhteydessä
...
ilman
...
hakasulkujen
...
välissä
...
olevaa
...
lukua,
...
kääntäjä
...
laskee
...
merkkijonon
...
pituuden
...
automaattisesti.
...
Staattiset muuttujat
Paikallinen staattinen muuttuja
Jos halutaan paikallisen muuttujan muistavan arvonsa siitä, kun funktio suoritettiin edellisen kerran, täytyy muuttuja esitellä staattisena esim. seuraavasti:
Code Block |
---|
---- h2. Staattiset muuttujat h3. Paikallinen staattinen muuttuja Jos halutaan paikallisen muuttujan muistavan arvonsa siitä, kun funktio suoritettiin edellisen kerran, täytyy muuttuja esitellä staattisena esim. seuraavasti: {code} void funktio() { static int Laskuri; // Paikallinen staattinen muuttuja, säilyttää tietonsa funktiokutsujen välillä } int main() { } {code} |
Staattinen
...
muuttuja
...
saa
...
automaattisesti
...
alkuarvokseen
...
nollan,
...
joten
...
sitä
...
ei
...
alusteta
...
esittelyn
...
yhteydessä.
...
Staatisena
...
esitellyllä
...
muuttujalla
...
voidaan
...
esim.
...
laskea,
...
kuinka
...
monta
...
kertaa
...
ko.
...
funktiossa
...
on
...
käyty.
...
Yhteinen
...
staattinen
...
muuttuja
...
Haluttaessa
...
rajata
...
yhteisen
...
muuttujan
...
näkyvyys
...
ainoastaan
...
siihen
...
tiedostoon,
...
jossa
...
se
...
on
...
esitelty,
...
täytyy
...
yhteinen
...
muuttuja
...
esitellä
...
staattisena
...
esim.
...
seuraavasti:
Code Block |
---|
} static long Summa; // Globaali staattinen muuttuja int main() { } {code} |
Edellä
...
oleva
...
määrittely
...
kannatta
...
tehdä
...
esim.
...
silloin
...
kun
...
samaa
...
ohjelmistoprojektia
...
tekee
...
useita
...
henkilöitä
...
ja
...
halutaan
...
estää
...
samanimisten
...
eri
...
tiedostoissa
...
olevien
...
muuttujien
...
vaikutus
...
toisiinsa.
...
Nämäkin
...
muuttujat
...
täytyy
...
tietysti
...
esitellä
...
funktioiden
...
ulkopuolella.