Muuttujan osoite int a=1; 0xbfffea64 /* tulostetaan a:n osoite*/ printf(“%p\n”, &a); 0xbfffea68 /* tulostetaan a:n osoite + 1*/ printf(“%p\n”, &a+1); /*

Slides:



Advertisements
Samankaltaiset esitykset
18. Abstraktit tietotyypit
Advertisements

Tietorakenteet ja algoritmit
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Hannu Laine 1 Tietorakenteet ja algoritmit Funktio-osoittimet Funktio-osoittimen ja taulukko-osoittimen vertailu Funktio-osoittimen käyttötapoja.
JavaScript (c) Irja & Reino Aarinen, 2007
Tietorakenteet ja algoritmit
11/9/2012 © Hannu Laine 1 Tietorakenteet ja algoritmit Elegantti toteutus funktiolle insert_to_list_end Alkion lisäys sisällön mukaan järjestettyyn listaan.
2.8.3 Abstraktit tietotyypit
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet
Markku Siermala, IMT Bioinformatiikan koulutusohjelma
Taulukot Jukka Juslin © Jukka Juslin 2006.
Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille
Copyright  Hannu Laine Osoittimet ja taulukot Hannu Laine.
C-kieli ja dynaaminen muistin varaus
22. Taulukot.
Rakenteinen ohjelmointi
1. Olio-ohjelmointi.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
OLIO-OHJELMOINTI PERUSTEET PERUSTIETOTYYPIT
TyyppimuunnoksettMyn1 Tyyppimuunnokset Joskus kääntäjän on tehtävä itse päätöksiä, jos ohjelmoija ei ole ajatellut yksityiskohtia: int arvo1=10; long arvo2=25;
Vakio-osoitin ja osoitin vakioon tMyn1 Vakio-osoitin ja osoitin vakioon Tavallinen osoitin voi vaihtaa osoitettavaa keskusmuistialuetta. Tämä voidaan tehdä.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
Osoitin ja char- tietotyyppi tMyn1 Osoitin ja char-tietotyyppi Osoitinmuuttuja, joka on tyyppiä char* voidaan alustaa merkkijonolla: char* alku=”En toivo.
Sami Jantunen LTY/Tietotekniikan osasto
Dynaamiset oliottMyn1 Dynaamiset oliot Dynaamisen olion tunnuksen esittely ja olion määrittely voivat tapahtua yhtäaikaisesti tai eri aikaan. Dynaamisen.
Funktion esittely eli prototyyppi tMyn1 Funktion esittely eli prototyyppi Funktion esittely (function declaration) kertoo funktion nimen, parametrien tyypit.
7. Oliot ja viitteet.
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
2.8 TIETO- JA TALLETUSRAKENTEET
19. Olio-ohjelmointia Javalla
XNA peliohjelmointi. XNA Perustuu Microsoftin kehittämään.NET- arkkitehtuuriin ja C#-kieleen. XNA:lla tehdyt pelit toimivat Windows ja XBOX360-alustoilla.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
1 Ohjelmointikielten varhaishistoria Esa-Matti Miettinen
Johdatus ohjelmointiin – C kielen peruselementit Tutkijayliopettaja Manne Hannula Opetusharjoittelu (ohjaava opettaja Jukka Jauhiainen)
2. Lisää Java-ohjelmoinnin alkeita
FunktiottMyn1 Funktiot Funktiot voidaan jakaa –Kirjastofunktioihin, jotka ovat valmiina kaikkien käytössä. Erikoisempien kirjastofunktioiden käyttöönotto.
Osoittimen määrittely ja alustus tMyn1 Osoittimen määrittely ja alustus Osoitin (pointer) on muuttuja, joka voi sisältää keskusmuistiosoitteen. Osoitinmuuttujan.
Foreach-toistolausetMyn1 foreach-toistolause foreach-rakenteella on kätevä käydä läpi kaikki taulukon alkiot. Erityisen kätevää se on hajautustaulukon.
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Prioriteettijonot ja kekolajittelu (heapsort)
Lajittelun sovelluksia Yksilöllisyyden testaaminen Kopioiden poistaminen Mediaani/n:ksi suurimman valinta frekvenssien laskenta/yleisin alkio, l.moodi.
Linkitetty lista Joukko alkioita jotka on kytketty toisiinsa linkeillä Listan alkio sisältää talletettavan datan ja linkin seuraavan alkioon Alkion lisääminen.
Tietorakenteet ja C-kieli
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
Tiedosvirtat Puskuroiduissa virroissa lukeminen/kirjoittaminen tapahtuu lohko kerrallaan stdin – puskuroitu (näppäimistö) stdout – purkuroitu (näyttö)
Core dump Ohjelman kaatuessa tietynlaisiin virheisiin (erityisesti muistivirheeseen, segmentation fault), sen senhetkinen tila (muistin kuva) voidaan tallettaa.
Funktioesittelyt (declarations) Jos funktiota käytetään ennen sen määrittelyä (definition), se pitää esitellä (declare) - muuten sen tyypiksi oletetaan.
Struct struct on tietotyyppi, joka koostuu kokoelmasta eri tyyppisiä, nimellä viitattavia elementtejä, jäseniä (members): struct { int tuotenumero; char.
1. Omat operaatiot.
7. Oliot ja viitteet.
2. Taulukot.
17. Javan omat luokat.
Scala Collections.
7. Hyvä ohjelmointitapa..
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
7. Näytölle tulostaminen
2. Taulukot.
7. Oliot ja viitteet.
7. Hyvä ohjelmointitapa..
5. Aliohjelmien toteutus
7. Näytölle tulostaminen
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
Jakso 4 Aliohjelmien toteutus
Esityksen transkriptio:

Muuttujan osoite int a=1; 0xbfffea64 /* tulostetaan a:n osoite*/ printf(“%p\n”, &a); 0xbfffea68 /* tulostetaan a:n osoite + 1*/ printf(“%p\n”, &a+1); /* tulostetaan a:n osoite - 1*/ printf(“%p\n”, &a-1); 0xbfffea60 muuttajan osoite saadaan &:n avulla 1 a

Muuttuja ’a’ muistissa printf(“%i”, sizeof a); 4 0xbfffebeb 0xbfffebe0 0xbfffebe1 0xbfffebe2 0xbfffebe3 0xbfffebe4 0xbfffebe5 0xbfffebe6 0xbfffebe7 0xbfffebe8 0xbfffebe9 0xbfffebea int:n vaatima muistitila ’a’ int:n vaatima muistitila

struct:n osoite struct tieto{ short a; char b; short c; } b; printf("%p\n", &b); printf("%p\n", &b+1); printf("%i\n", sizeof b); printf("%i\n", sizeof b.a+sizeof b.b+sizeof b.c); 6 0xbfffe446 0xbfffe440 5

osoittimet eli pointterit osoittimien määrittely & - operaatori * - operaattori Käytetään luotaessa linkitettyjä listoja, puite, graafeja ja muita tietorakenteita Funktio voi muuttaa parametrejaan Yleisin virheiden lähde

Osoittimien määrittäminen Osoittimet määritetään *:n avulla int i; Määritetään kokonaislukumuuttuja i Määritetään osoitin p muuttujaan i int *p = &i;

Osoitin esimerkkejä float *i; /* i on osoitin tyyppiin float */ int j, *k; /* j on int, k on osoitin tyyppiin int */ Osoitin voi osoittaa vain saman tyyppiseen muuttujaan kuin määrittelyssä sanottiin k=&j;i=&j;

* - operaattori Käänteinen &-operaattorille &-operaattori antaa muuttujan osoitteen *-operaattori antaa osoitteessa olevan muuttujan #include int main(void){ char a = 'c'; char *p=&a; printf("%c\n", a); printf("%c\n", *p); /* p:n osoittama merkki */ return 0; } c0xbffffa67 p a

Osoittimien käyttöä pointterin osoittamiin arvoihin voidaan myös kirjoittaa #include int main(void){ char a = 'c'; char *p=&a; printf("%c\n", *p); (*p)++; printf("%c\n", a); return 0; } ’c’ ’d’0xbffffa67 pa

*p=*q vs p=q #include int main(void){ char a = 'c', b='d'; char *p=&a, *q=&b; *p=*q; printf("%c, %c\n", *p, *q); p=q; printf("%c, %c\n", *p, *q); return 0; } ’c’ ’d’0xbffffa67 pa ’d’0xbffffa68 q b ’d’ 0xbffffa67 0xbffffa68 p a ’d’0xbffffa68 q b

Alusta osoittimet! #include int main(void){ char a = 'c'; char *p; *p='d'; printf("%c\n", *p); return 0; } c? pa

NULL pointteri *p ei viittaa muistiin => Segmentation fault NULL pointteri on aina erisuuri kuin muut pointterit Käytetään linkitetyssä listassa listan päättämiseen NULL-pointteriin ei voi käyttää *-operaattoria int main(void){ char *p; p=NULL; printf("%c\n", *p); return 0; }

Osoitin osoittimeen Osoittimet voivat osoitaa mihin tahaansa tyyppiin Voidaan määrittää osoitin osoittimeen int main(void){ int a=1; int *p=&a; int **pp; pp=&p; return 0; } 1 a 0xbfffef54 p 0xbfffef50 pp *pp *p

Taulukot Joukko samaa tietotyyppiä olevia alkioita #include int main(void){ int i, c[5]={0, 1, 2, 3}; int *p; for(i=0; i<5; i++) printf("%i\n", c[i]); for(p=&c[0]; p < &c[5]; p++) printf("%i\n", *p); return 0; } Taulukon koko on viisi joista neljä ensimmäistä arvoa alustetaan &c[0] osoittaa taulukon alkuun c 0xbfffef54 p &c[0] == c

Taulukoa taaksepäin #include int main(void){ int c[5]={0, 1, 2, 3, 4}; int *p; for(p=&c[4]; p>=c; p--) printf("%i\n", *p); return 0; } &c[4] osoittaa taulukon viimeiseen alkioon c 0xbfffef54 p

Osoittimien vähentäminen toisistaan Samaan taulukkoon osoittavien osoittimien erotus antaa erottavien taulukko elementtien lukumäärän int main(void){ int c[5]={0, 1, 2, 3, 4}; int *p, *p2; p=&c[1]; p2=&c[4]; printf("%i\n", p2-p); return 0; } p2-p== c pp2

Moniulotteinen taulukko Esimerkki kaksiulotteisen taulukon määrittelystä float e[2][3] = {{1.0, 2.0, 3.0}, {2.0, 3.0, 4.0}};

Merkkijonojen ja osoittimien välinen yhteys Merkkijonot ovat taulukoita joiden alkioina ovat yksittäiset merkit #include int main(void){ char eka[]="Merkkijono"; char *p, *toka="Toinen merkkijono"; int i; for(i=0; i<sizeof eka; i++) printf("%c", eka[i]); for(p=toka; *p; p++) printf("%c", *p); return 0; } sizeof(eka)==11 sizeof(toka)==4 merkkijonon viimeinen merkki on ’\0’ tällöin *p on epätosi

Osoitin tietueisiin (struct) int main(void){ struct paivays{ int paiva; int kuukausi; int vuosi; }; struct paivays paiva1={15, 1, 2004}, *paiva2; paiva2=&paiva1; printf("%i.%i.%i\n", paiva1.paiva, paiva2->kuukausi, (*paiva2).vuosi); return 0; } tietueen kenttiin viitataan.:llä osoitinmuuttujan osoittaman tietueen kenttiin viitataan ->:llä

Funktiot Funktiolle annettavien parametrien määrää ei ole rajoitettu Paluuarvo yksi tai ei yhtään Kutsuttaessa funktio saa väliaikaiset arvot kutsuparametreistaan Niiden muutaminen ei muuta kutsuvan ohjelman arvoja

Muuttujan osoitteen välitys funktioon Kutsuvassa funktiossa olevia muuttaja-arvoja voidaan muuttaa välittämällä muuttujan osoite funktioon #include void funktio(int *param, int param2){ *param=param2;} int main(void){ int a=1,b=2; funktio(&a,b); printf("a=%i, b=%i\n", a, b); return 0;} sijoittaa param2:n arvon param:n osoittamaan muistipaikkaan &a on muuttujan a osoite