Nested-Struct -rakeenteen attribuuttiin viittaus?

#include <stdio.h>

struct Car {
char manufacturer[20];
char colour[5];
struct Person {
char name[5];
} owner;
};

int main() {
struct Car vechile;
vechile.manufacturer, "Mercedes";
vechile.colour, "Black";
vechile.owner.name, "Jere";
printf ("Car's present owner:", vechile.owner.name);
return (0);
}

15

223

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Tuo tulostaa vain tyhjää. Voisiko joku myös pistää vastaavaan koodin käyttäen Pointeria, onko se suomennettuna osoitin, jos jatkossa olen myymässä tuota mustaa Mersuani, esimerkiksi Jarelle, pääseekö tuohon auto-structin sisällä oleva Person structiin viitata jotenkin suoraan, tai siis muistipaikkaan, missä auton omistaja sijaitsee?

      Jonkinlainen pointteri-esimerkki samasta koodista olisi mukava.

      • Anonyymi

        Kyllä varmaan vois, jos haluaisi.


    • Anonyymi

      Nuo tekstit pitäisi kopioida paikalleen char taulukoihin, tutustu esim. strcpy funktioon. Ja printf:ään pitää lisätä %s.

      • Anonyymi

      • Hienoa, kiitos! Noihin merkkijono-funktioihin, joita C:ssä on tarjollla, pitänee tutustua paremmin, kun nytkin kiikasti siitä, kun en käyttänyt tuota strcpy:tä.


      • Anonyymi

        Ja tuolla yksinertainen pointteriesimerkki: http://codepad.org/znppI5tI

        Tuota olisi ehkä syytä muuttaa niin, että merkkijonoille varattaisiin myös erikseen muisti ja kopioitaisiin sisältö samaan tapaan kuin ilman pointtereita tehdyssä esimerkissä.

        Structin varausta ja alustusta varten voisi sitten tehdä erillisen funktion, esim. new_Car(), niin voisi mainissa luoda auton tähän tapaan: struct Car *vechile = new_Car("Black", "Mercedes", "Jere");

        Omistajan vaihtoa varten voi tehdä vaikka setterin set_Car_owner(struct Car *vechile);

        Tai sitten voi kokeilla koodata vaikka tällaisenkin: set_Person_name(struct Person *owner);

        Ja muistin vapautusta varten sitten vielä oma funktio, joku tämän tapainen delete_Car(struct Car *vechile);

        Siinähän sitä on vähän harjoittelua.


      • Anonyymi
        Anonyymi kirjoitti:

        Ja tuolla yksinertainen pointteriesimerkki: http://codepad.org/znppI5tI

        Tuota olisi ehkä syytä muuttaa niin, että merkkijonoille varattaisiin myös erikseen muisti ja kopioitaisiin sisältö samaan tapaan kuin ilman pointtereita tehdyssä esimerkissä.

        Structin varausta ja alustusta varten voisi sitten tehdä erillisen funktion, esim. new_Car(), niin voisi mainissa luoda auton tähän tapaan: struct Car *vechile = new_Car("Black", "Mercedes", "Jere");

        Omistajan vaihtoa varten voi tehdä vaikka setterin set_Car_owner(struct Car *vechile);

        Tai sitten voi kokeilla koodata vaikka tällaisenkin: set_Person_name(struct Person *owner);

        Ja muistin vapautusta varten sitten vielä oma funktio, joku tämän tapainen delete_Car(struct Car *vechile);

        Siinähän sitä on vähän harjoittelua.

        Kyllä, malloc() ja free() kannattaa ottaa käyttöön heti alkuvaiheessa, niin ei ala pinomuisti täyttymään. Lisäksi suosittelen tutustumaan linkitettyihin listoihin, joiden avulla saadaan tehtyä dynaamisia tietorakenteita. https://wiki.amigaos.net/wiki/Exec_Lists_and_Queues

        Käytännössähän "oman" tietorakenteen eteen lisätään node, jossa on pointterit edelliseen ja seuraavaan. Esimerkissä "hyötyosuus" on tuo TEXT nn_Data[62] merkkijono.

        struct NameNode {
        struct Node nn_Node; /* System Node structure */
        TEXT nn_Data[62]; /* Node-specific data */
        };


        Käsittely voidaan tehdä castaamalla oma struktuuri node-tyyppiseksi. Tarvittavat funktiot, node- ja listastruktuurit on helppo tehdä itsekin. Minäkin tein ne taannoin matkimalla tuota Amigan rakennetta ja Execin funktioita.


      • Anonyymi
        jerzunposti kirjoitti:

        Hienoa, kiitos! Noihin merkkijono-funktioihin, joita C:ssä on tarjollla, pitänee tutustua paremmin, kun nytkin kiikasti siitä, kun en käyttänyt tuota strcpy:tä.

        Harrastatko yhtä paljon tätä monologin kirjoittamista omallakin kotisivullasi?


      • Anonyymi
        Anonyymi kirjoitti:

        Kyllä, malloc() ja free() kannattaa ottaa käyttöön heti alkuvaiheessa, niin ei ala pinomuisti täyttymään. Lisäksi suosittelen tutustumaan linkitettyihin listoihin, joiden avulla saadaan tehtyä dynaamisia tietorakenteita. https://wiki.amigaos.net/wiki/Exec_Lists_and_Queues

        Käytännössähän "oman" tietorakenteen eteen lisätään node, jossa on pointterit edelliseen ja seuraavaan. Esimerkissä "hyötyosuus" on tuo TEXT nn_Data[62] merkkijono.

        struct NameNode {
        struct Node nn_Node; /* System Node structure */
        TEXT nn_Data[62]; /* Node-specific data */
        };


        Käsittely voidaan tehdä castaamalla oma struktuuri node-tyyppiseksi. Tarvittavat funktiot, node- ja listastruktuurit on helppo tehdä itsekin. Minäkin tein ne taannoin matkimalla tuota Amigan rakennetta ja Execin funktioita.

        Niin, sepä olikin vähän niin kuin harjoitustehtäväksi ehdotettu. Samoin noiden merkkijonojen käsittelyssä kannattaa tutustua myös ns. turvallisempiin vaihtoehtoihin, esim. strncpy vs. strcpy.

        Noita listoja yms. tietotyyppejähän tosiaan korkeamman tason kielissä on valmiina, mutta C:ssä pitää toteuttaa itse. Tai no onhan niitä kai valmiina kirjastoina C:henkin olemasa, mutta kieli ei suoraan sisällä esim. linkitettyä listaa.


      • Anonyymi
        jerzunposti kirjoitti:

        Hienoa, kiitos! Noihin merkkijono-funktioihin, joita C:ssä on tarjollla, pitänee tutustua paremmin, kun nytkin kiikasti siitä, kun en käyttänyt tuota strcpy:tä.

        "pitänee tutustua paremmin, kun nytkin kiikasti siitä, kun en käyttänyt tuota strcpy:tä."

        Hei jerzunposti, sinulla kyllä näytää kiikastavan ihan liikaakin.


    • Miten niin monologia? En harrasta monologia, en ole yhtään kommenttia kirjoittanut tänne "Anonyymi"nä, kuten jotkut näyttää sitäkin harrastavan, vaikka todellisuudessa ei ole anonyymejä.

      Ihmiselle on syntymän jälkeen annettu jokin nimi, ja niillä sitten toimitaan.

      • Anonyymi

        Mitäs sää Anonyymi nyt pimahdit? Vai olinko se minä?


      • Anonyymi
        Anonyymi kirjoitti:

        Mitäs sää Anonyymi nyt pimahdit? Vai olinko se minä?

        Hmm.. kylläpä täältä hassusti katoaa viestejä, kun vastaukset liitetään sitten ihan eri kommenttiin kuin mihin oli alun perin vastattu.


      • Anonyymi
        Anonyymi kirjoitti:

        Hmm.. kylläpä täältä hassusti katoaa viestejä, kun vastaukset liitetään sitten ihan eri kommenttiin kuin mihin oli alun perin vastattu.

        Koko ketju joutaa pois, tälläistä roskaa ei tarvita.


    • Anonyymi

      Luokalleen jääneistä paras

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

    Luetuimmat keskustelut

    1. Purra sössi kaiken 2 vuodessa, itkee nyt Marinin perään

      Nyt on taas sama vanha itkuvirsi, kun ei omat taidot riittänee. Kaikki on taas muiden syytä. No miten sen "Tunnin juna"
      Maailman menoa
      149
      9747
    2. Ikuiset kaipaajat

      Miksette vaan mene sen kaipauksen kohteen luokse ja puhu sille suoraan? Mitä järkeä on kaipailla jotain puolituttua vuo
      Ikävä
      169
      6149
    3. Eli persujen rääkyminen Marinin hallituksen velanotosta oli sitä itseään

      "Valtiovarainministeriön mukaan Marinin hallitus lisäsi valtion pysyviä menoja 3 miljardia eikä 11 miljardia euroa." El
      Maailman menoa
      33
      5497
    4. Nyt se on selvitetty: Sanna Marinin hallitus lisäsi menoja 41 miljardilla

      ”vasemmistohallitus oli katastrofaalisen huono”, sanoo kokoomus. Sanna Marinin (sd.) hallituksen tekemät menolisäykset
      Maailman menoa
      172
      5451
    5. MTV3 - Auerin poika todistaa videolla, miten Anneli pahoinpiteli lapsia!

      Kello 10.04 – Ainakin kerran viikossa se löi. Löi muitakin sisaruksia, mutta ei isosiskoa. Nuorinta siskoa en ole nähny
      Henkirikokset
      6
      4482
    6. Orpon hallitus runnoi Tunnin junan ilman tarvetta

      Näinkö valtiontaloutta hoidetaan? Siis asiantuntijoidenkin aikoja sitten kannattamattomaksi laskema Tunnin juna tehdään
      Maailman menoa
      59
      4453
    7. Riikka ottaa miljardi euroa EU:n yhteisvelkaa Suomelle

      Niin kääntyi irvipersun takki taas, vaikka vaalilupauksissa oli ettei yhteisvelkaa Suomi enää koskaan ota. No nyt otti m
      Maailman menoa
      88
      3541
    8. Lindtman ylivoimainen suosikki pääministeriksi

      Lindtmania kannattaa pääministeriksi peräti 50 prosenttia useampi kuin toiseksi suosituinta Kaikkosta. https://www.ilta
      Maailman menoa
      78
      3499
    9. En tiedä ymmärrätkö

      Kuinka paljon merkitset mulle. Näet minut minuna etkä silti käännä selkääsi. Tökit jatkuvasti kepillä jäätä ja menit ehk
      Ikävä
      10
      2991
    10. Sanna Marin - Maailman paras talousasiantuntija?

      PersKeKoa pukkaa? https://www.hs.fi/politiikka/art-2000011636623.html
      Maailman menoa
      128
      2950
    Aihe