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

790

    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. Kuka maksaa Elokapinan töhrinnän?

      Vieläkö tukevat Elokapinan toimintaa mm. Aki Kaurismäki, Sofi Oksanen, Paleface, Koneen Säätiö ym. ? Kenen kukkarosta ot
      Maailman menoa
      587
      3900
    2. Muuttaisiko viesti mitään

      Haluaisin laittaa viestin, mutta muuttaisiko se mitään. Oletko yhä yhtä ehdoton vai valmis kyseenalaistamaan asenteesi j
      Ikävä
      48
      3338
    3. Jos sinulla kiinnostaisi

      Nyt, miten antaisit minun ymmärtää sen?
      Ikävä
      38
      2811
    4. Valpuri Nykänen elokapina

      Aikas kiihkomielinen nainen kun mtv:n uutiset haastatteli. Tuollaisiako ne kaikki on.
      Maailman menoa
      66
      2779
    5. Oon vähän ihastunut suhun nainen

      Vaikka toisin jokin aika sitten väitin mutta saat mut haluamaan olemaan parempi ihminen :)
      Ikävä
      19
      2154
    6. Jospa me nähtäisiin

      Sinne suuntaan menossa🤣
      Ikävä
      32
      2101
    7. Se että tavattiin

      Hyvin arkisissa olosuhteissa oli hyvä asia. Olimme molemmat lähestulkoon aina sitä mitä oikeasti olemme. Tietysti pieni
      Ikävä
      12
      1997
    8. Elämä jatkuu

      Onneksi ilman sinua
      Ikävä
      29
      1875
    9. Oot pala mun sielua

      Jos toivot, että lähden mä lähden. Jos toivot, että jään mä jään. Koen, että olet mun sielunkumppani, mutta lämmöllä my
      Ikävä
      17
      1830
    10. Hei T........

      Ajattelin kertoa että edelleen välillä käyt mielessä.... En ole unohtanut sinua, enkä varmasti ikinä... Vaikka on kulunu
      Suhteet
      47
      1759
    Aihe