Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

8.2 Muuttujat

Ohjelmamme poikkeaa aikaisemmista esimerkeistä siinä, että nyt ohjelman sisällä tarvitaan muuttuvaa tietoa: matka millimetreinä. Tällaiset muuttuvat tiedot talletetaan ohjelmointikielissä muuttujiin. Muuttuja on koneen muistialueesta varattu tarvittavan kokoinen "muistimöhkäle", johon viitataan käytännössä muuttujan nimellä.

Kone viittaa muistipaikkaan muistipaikan osoitteella. Kääntäjäohjelman tehtävä on muuttaa muuttujien nimiä muistipaikkojen osoitteiksi. Kääntäjälle täytyy kuitenkin kertoa aluksi minkä kokoisia 'möhkäleitä' halutaan käyttää. Esimerkiksi kokonaisluku voidaan tallettaa pienempään tilaan kuin reaaliluku. Mikäli haluaisimme varata vaikkapa muuttujan, jonka nimi olisi matka_mm kokonaisluvuksi, kirjoittaisimme seuraavan C-kielisen lauseen (muuttujan esittely):

	int matka_mm; /* yksinkertaisen tarkkuuden kokonaisluku */

Pascal - kielen osaajille huomautettakoon, että Pascalissahan esittely oli päinvastoin:

	VAR matka_mm: INTEGER;

Tulos, eli matka kilometreinä voitaisiin laskea muuttujaan matka_km. Tämän muuttujan on kuitenkin oltava reaalilukutyyppinen (ks. esimerkkiajo), koska tulos voi sisältää myös desimaaliosan:

	double matka_km; /* kaksinkertaisen tarkkuuden reaaliluku */

On olemassa myös yksinkertaisen tarkkuuden reaaliluku float, mutta emme tarvitse sitä tällä kurssilla. Samoin kokonaisluvusta voidaan tehdä etumerkillinen, etumerkitön, "lyhyt" tai "kaksi kertaa isompi":

	signed int matka_km;       /* Sama kuin int matka_km  */
	unsigned int sormia;       /* Aina positiivinen       */
	short int varpaita;        /* Ei koskaan kovin montaa */
	long int valtion_velka_Mmk;/* Tarvitaan ISO arvoalue  */

int- tyyppiä ei edellä olisi pakko kirjoittaa:

	signed matka_km;       /* Sama kuin int matka_km  */
	unsigned sormia;       /* Aina positiivinen       */
	short varpaita;        /* Ei koskaan kovin montaa */
	long valtion_velka_Mmk;/* Tarvitaan ISO arvoalue  */

Muuttujan määritys voisi olla myös

	const volatile unsigned long int sadasosia; 

Tulemme kuitenkin aluksi varsin pitkään toimeen pelkästään seuraavilla tyypeillä ja niiden osoittimilla ( Turbo C++:n arvoalueet):

	int      -  kokonaisluvut - 32 768 -   32 767, 16-bit, tai
	           - -2 147 483 648 - 2 147 483 647, 32-bit systeemit
	double   -  reaaliluvut n. 15 desim. - > 1.7e308
	char     -  kirjaimet, kokonaislukuina - 128 -   127 (tai 0-255)


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys