tietuetyyppi struct -määreellä

esittely/määrittely

Eli kysymys tietuetyypistä struct -määreellä. Lueskelen Hietaniemen C ja olio-ohjelmointi kirjaa sekä Hirvosen Ohjelmoinnin alkeet C-kieltä käyttäen ja pikkasen meinaa olla ristiriitaista ihan tuo Hietasen kirjan jututkin. Jos voitte niin katsokaa itse Hietasen kirjasta Luku 9 sivut 148-151. Eli Hietasen kirjassa puhutaan tietueen (struct) määrittelystä ja esittelystä sekä alustuksesta. Määrittelyn ja esittelyn ero vähän ihmetyttää. struct PVM { int pp; int kk; int vv; }; (Onko tämä esittely vai määrittely) Eli tästä sanotaan että tietue määritellään struct määreen avulla. (Voiko muuten C :ssa käyttää tuossa edessä vielä typedef-määritystäkin? C:ssä ainakin voi... Mikälie ero?) Kohta sitten sanotaankin että "tietuetyypin esittely ei vielä varaa muistilaa..." Ja jonkun rivin päästä: "Tietueen tilanvaraus tapahtuu tilanvaraus tapahtuu määrittelemällä tietue." TIETUETYYPPI tietue eli tässä tapauksessa esim PVM pvm; Sitten kirjassa on esimerkki 9-3 PVM-tietueiden käyttö joka on selitetty, ja siellä taas koko homma on koko ajan kerrottu että tietue on määritelty... helvetin sekavaa Ja sitten kun katsoo vielä Hirvosen ohjelmoinnin alkeet niin vielä enemmän sekaisin menee. SIellä ei puhuta esittelystä mitään, ainoastaan määrittelystä joka on tällainen typedef struct{ char tuote_nimi[30]; float hinta; }HINTA_TIETUE; HINTA_TIETUE tuote; Selittäkääpä tätä juttua, kiitos.

5

773

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • jatkokysymys

      tarkoittaisiko nämä samaa asiaa? ------------- struct PVM { int pp; int kk; int vv; }; PVM pvm; ------------ ------------ struct PVM { int pp; int kk; int vv; }pvm; ------------

      • tarkoittavat

        juurikin samaa. Taisit unohtaa että varaus on: struct PVM pvm; Typedef tekee "aliaksen", jonka jälkeen tuota ei enää tarvi. Ajattele struktuureita tietotyyppeinä, kuten inttiä. Inttiä ei tarvitse esitellä missään, koska se tunnetaan aina. Inttiä ei myöskään tarvitse määritellä, koska se tunnetaan ja on määritelty sisältämään kokonaislukuja. Muistin varaus tapahtuu samalla lailla struktuurin kanssa kuin intinkin, int i; tekee muuttujan. Tuo ensimmäinen versio on "perusmalli" joka määrittelee PVM:n (pelkkä esittely olis struct PVM;). Kakkonen määrittelee ja varaa PVM mallisen struktuurin nimeltään pvm. Typedef säästää structin jatkuvalta kirjottamiselta. Jos haluat lisää PVM tyyppejä, teet aina: struct PVM foo; typedef struct {} jotain; riittää jotain foo;


    • tietuetyypin määrittely ja ...

      eli nythän kai tajusin vähän väärin; on kaksi eri asiaa tietuetyypin määrittely ja tietueen määrittely. Mutta onko tietuetyypin esittely==tietuetyypin määrittely. Nuo sanat on otettu Hieatasen kirjasta.

      • hieman...

        Tapa 1: struct foo; /* esittely (declare) */ Esittely kertoo vain että on olemassa jokin foo-niminen struct. struct foo { /* määrittely (define) (tai esittely määrittely, jos esittelyä ei aiemmin)*/    int bar1;    int bar2; }; Määrittely kertoo structin sisällön. typedef struct foo foo; /* synonyymi struct foolle */ typedef struct foo Too; /* toinen nimi */ Nyt käy: struct foo f1; foo f2; Too t3; Tapa 2: Kaikki samassa: typedef struct foo { /* esittely määrittely synonyymi(t) */    int bar1;    int bar2; } foo, Too; Nyt käy myös: struct foo f1; foo f2; Too t3; Tapa 3: typedef struct { /* vain määrittely synonyymi */    int bar1;    int bar2; } foo; Nyt käy vain: foo f2; Tapa 4: typedef struct foo Too, foo; /* esittely ja synonyymit ennen */ struct foo { /* määrittely */ int bar1; int bar2; }; Taas käy: struct foo f1; foo f2; Too t3; Tavat 1, 2 ja 4 on täysin sama asia. Ja ykkösessä voi jättää esittelyn pois. Selkein lienee nelos-tapa. "Mutta onko tietuetyypin esittely==tietuetyypin määrittely. Nuo sanat on otettu Hieatasen kirjasta." Siis typedef antaa datatyypille uuden nimen eli synonyymin, ja sitä pitänee kai sanoa määrittelyksi, koska se voidaan vain kerran määritellä (vrt. esittely ja myöhemmin määrittely). Toisaalta sitä ehkä voisi sanoa esittelyksi... Asia pitäisi tarkistaa C-kielen tekijöiden Kernighan, Ritchie: The C Programming Language-kirjasta (suomeksi C ohjelmointi). Siis eri asioita: typedef struct foo Too; On siis: uusi tyyppi Too synonyymiksi foolle ja structin foo esittely. Tätä tarkoittaa 'tietuetyypin esittely'. Ja toi Tapa 2, olisi se 'tietuetyypin määrittely', vaikka se on oikeasti (pilkkua nusuttaen) tietueen esittely määrittely ja tyypin synonyymin määrittely. Katso myös: http://c-faq.com/struct/typedef.html


      • hieman...
        hieman... kirjoitti:

        Tapa 1: struct foo; /* esittely (declare) */ Esittely kertoo vain että on olemassa jokin foo-niminen struct. struct foo { /* määrittely (define) (tai esittely määrittely, jos esittelyä ei aiemmin)*/    int bar1;    int bar2; }; Määrittely kertoo structin sisällön. typedef struct foo foo; /* synonyymi struct foolle */ typedef struct foo Too; /* toinen nimi */ Nyt käy: struct foo f1; foo f2; Too t3; Tapa 2: Kaikki samassa: typedef struct foo { /* esittely määrittely synonyymi(t) */    int bar1;    int bar2; } foo, Too; Nyt käy myös: struct foo f1; foo f2; Too t3; Tapa 3: typedef struct { /* vain määrittely synonyymi */    int bar1;    int bar2; } foo; Nyt käy vain: foo f2; Tapa 4: typedef struct foo Too, foo; /* esittely ja synonyymit ennen */ struct foo { /* määrittely */ int bar1; int bar2; }; Taas käy: struct foo f1; foo f2; Too t3; Tavat 1, 2 ja 4 on täysin sama asia. Ja ykkösessä voi jättää esittelyn pois. Selkein lienee nelos-tapa. "Mutta onko tietuetyypin esittely==tietuetyypin määrittely. Nuo sanat on otettu Hieatasen kirjasta." Siis typedef antaa datatyypille uuden nimen eli synonyymin, ja sitä pitänee kai sanoa määrittelyksi, koska se voidaan vain kerran määritellä (vrt. esittely ja myöhemmin määrittely). Toisaalta sitä ehkä voisi sanoa esittelyksi... Asia pitäisi tarkistaa C-kielen tekijöiden Kernighan, Ritchie: The C Programming Language-kirjasta (suomeksi C ohjelmointi). Siis eri asioita: typedef struct foo Too; On siis: uusi tyyppi Too synonyymiksi foolle ja structin foo esittely. Tätä tarkoittaa 'tietuetyypin esittely'. Ja toi Tapa 2, olisi se 'tietuetyypin määrittely', vaikka se on oikeasti (pilkkua nusuttaen) tietueen esittely määrittely ja tyypin synonyymin määrittely. Katso myös: http://c-faq.com/struct/typedef.html

        "Ja toi Tapa 2, olisi se 'tietuetyypin määrittely', vaikka se on oikeasti (pilkkua nusuttaen) tietueen esittely määrittely ja tyypin synonyymin määrittely." Tietysti myös Tapa 3 on 'tietuetyypin määrittely'. Tavat 1 ja 4 esittelevät ja määrittelevät tietueen erikseen ja asettavat tietotyypin nimen. Näin siis luulisin (näkemättä), mitä noissa kirjoissa tarkoitetaan. Onhan tää aika sekavaa... valitettavasti.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Tällä kertaa Marinia kadehtii Minäminä Päivärinta

      Kokoomuksen tyhjäntoimittelija itkeä tuhertaa, kun kansainvälinen superstaramme ei leiki hänen kanssaan. Oikean puoluee
      Maailman menoa
      388
      1533
    2. Minua itkettää tämä tilanne

      Meidän pitäisi jutella. Eikö niin? Miehelle.
      Ikävä
      105
      1288
    3. Miksi koulut pakottavat

      Lapset uimaan sekaryhmänä? Murrosikäiset tunnetusti häpeilevät vartalossa tapahtuvia muutoksia. Tulee turhia poissaoloja
      Maailman menoa
      116
      1220
    4. Miksi jollain jää "talvi päälle"

      Huvittaa kastoa ullkona jotain vahempaa äijää joka pukeutuu edelleen kun olisi +5 astetta lämmittä vaikka on helle keli
      Maailman menoa
      165
      1145
    5. Mitkä oli suurimmat

      Syyt mihin hänessä ihastuit alussa ja pikkuhiljaa tunteiden edetessä
      Ikävä
      44
      987
    6. Minulla oli tunteita

      Tein itsestäni pellen. Sait hyvät naurut ja minä 💔
      Ikävä
      63
      906
    7. Se katse silloin

      Oli hetki, jolloin katseemme kohtasivat. Oli talvi vielä. Kerta toisensa jälkeen palaan tuohon jaettuun katseeseen. Tunt
      Ikävä
      32
      816
    8. Suomen Pallolitto: Tasoryhmät lasten jalkapallossa - Erätauko-tilaisuus ma 20.5.2024

      Tasoryhmät lasten ja nuorten jalkapallossa herättävät paljon keskustelua. Mitä tasoryhmät ovat ja mikä on niiden tarkoit
      Suomi24 Blogi ★
      0
      810
    9. Susanne Päivärinta kirjassaan: Sannalla nousi valta päähän, Big Time!

      Päivärinta toteaa ettei ole nähnyt kenenkään muuttuvan niin totaalisesti kuin Marinin, eikä siis todellakaan parempaan s
      Maailman menoa
      91
      804
    10. Tuhdit oluet kauppoihin. Miksi vastustaa?

      8% oluet kauppoihin mutta mikä siinä on että osa politikoista vstustaa ? Kauppa kuitenkin hinnoittelee vahvan oluen ni
      Maailman menoa
      167
      701
    Aihe