Sisäkkäiset Rakenteet
C-kielessä rakenteet voivat sisältää muita rakenteita jäseniään, perusdatatyyppien kuten int tai char, taulukoiden ja osoittimien lisäksi. Sisäkkäiset rakenteet ovat hyödyllisiä, kun halutaan ryhmitellä toisiinsa liittyvää tietoa loogisella tavalla.
Sisäänrakennettu sisäkkäinen rakenne
Sisäänrakennettu sisäkkäinen rakenne määritellään suoraan ulomman rakenteen sisälle. Tämä tarkoittaa, että sisäkkäinen rakenne on olemassa vain ulomman rakenteen sisällä eikä sitä voi käyttää muualla.
main.c
123456789101112131415161718192021#include <stdio.h> struct Person { char name[50]; int age; struct Address { char street[50]; char city[50]; char index[10]; } address; // embedded nested structure }; int main() { struct Person person = { "Sherlock Holmes", 27, {"Baker Street", "London", "221B"} }; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }
Tässä esimerkissä Address-rakenne on määritelty Person-rakenteen sisällä, joten se on olemassa vain Person-rakenteen yhteydessä. Sisäkkäisen rakenteen kenttiin pääsee käsiksi käyttämällä person.address, mikä mahdollistaa street, city ja index-kenttien hakemisen. Tämä lähestymistapa on kätevä, kun sisäkkäinen tieto liittyy vain yhteen ulkoiseen rakenteeseen eikä sitä tarvitse käyttää muualla.
Erillinen sisäkkäinen rakenne
Erillinen sisäkkäinen rakenne määritellään itsenäisesti ja liitetään sitten ulkoiseen rakenteeseen. Tämä mahdollistaa sisäkkäisen rakenteen uudelleenkäytön useissa ulkoisissa rakenteissa tai sen itsenäisen luomisen.
main.c
123456789101112131415161718192021222324#include <stdio.h> struct Address { char street[50]; char city[50]; char index[10]; }; struct Person { char name[50]; int age; struct Address address; // nested structure }; int main() { struct Address addr = {"Baker Street", "London", "221B"}; struct Person person = {"Sherlock Holmes", 27, addr}; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }
Tässä Address määritellään itsenäisesti erillään Person-rakenteesta, joten sitä voidaan käyttää itsenäisesti tai useissa eri rakenteissa. Kun alustetaan Person, annetaan Address-kenttään address-instanssi. Sisäkkäisiin kenttiin päästään käsiksi samalla tavalla käyttäen person.address. Tämä lähestymistapa on joustavampi ja edistää koodin uudelleenkäyttöä sekä modulaarista suunnittelua.
Swipe to start coding
Jokainen tuote esitetään rakenteella Product, joka sisältää sisäkkäisen rakenteen Manufacturer. Funktion tulee käydä läpi tuotteiden taulukko, tarkistaa kuuluuko tuote määritellylle valmistajalle, ja laskea yhteen kaikkien vastaavien tuotteiden kokonaisarvo (price * quantity).
Toteuta funktio calculateManufacturerTotal, jonka paluuarvotyyppi on float.
- Luo funktion sisälle
float-tyyppinen muuttujatotalja aseta sen arvoksi0.0f. - Käytä
for-silmukkaa, joka käy tuotteiden taulukon läpi indeksistä0arvoonn. - Jokaiselle tuotteelle vertaa tuotteen
manufacturer.companyName-kenttää parametrina annettuuncompanyName-arvoon käyttäenstrcmp-funktiota. - Jos nimet täsmäävät, lisää
price * quantitymuuttujaantotal. - Palauta lopuksi muuttujan
totalarvo.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you show me an example of how to declare an embedded nested structure in C?
What are the advantages and disadvantages of using embedded versus separate nested structures?
How do I access the fields of a nested structure in C?
Mahtavaa!
Completion arvosana parantunut arvoon 4.35
Sisäkkäiset Rakenteet
Pyyhkäise näyttääksesi valikon
C-kielessä rakenteet voivat sisältää muita rakenteita jäseniään, perusdatatyyppien kuten int tai char, taulukoiden ja osoittimien lisäksi. Sisäkkäiset rakenteet ovat hyödyllisiä, kun halutaan ryhmitellä toisiinsa liittyvää tietoa loogisella tavalla.
Sisäänrakennettu sisäkkäinen rakenne
Sisäänrakennettu sisäkkäinen rakenne määritellään suoraan ulomman rakenteen sisälle. Tämä tarkoittaa, että sisäkkäinen rakenne on olemassa vain ulomman rakenteen sisällä eikä sitä voi käyttää muualla.
main.c
123456789101112131415161718192021#include <stdio.h> struct Person { char name[50]; int age; struct Address { char street[50]; char city[50]; char index[10]; } address; // embedded nested structure }; int main() { struct Person person = { "Sherlock Holmes", 27, {"Baker Street", "London", "221B"} }; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }
Tässä esimerkissä Address-rakenne on määritelty Person-rakenteen sisällä, joten se on olemassa vain Person-rakenteen yhteydessä. Sisäkkäisen rakenteen kenttiin pääsee käsiksi käyttämällä person.address, mikä mahdollistaa street, city ja index-kenttien hakemisen. Tämä lähestymistapa on kätevä, kun sisäkkäinen tieto liittyy vain yhteen ulkoiseen rakenteeseen eikä sitä tarvitse käyttää muualla.
Erillinen sisäkkäinen rakenne
Erillinen sisäkkäinen rakenne määritellään itsenäisesti ja liitetään sitten ulkoiseen rakenteeseen. Tämä mahdollistaa sisäkkäisen rakenteen uudelleenkäytön useissa ulkoisissa rakenteissa tai sen itsenäisen luomisen.
main.c
123456789101112131415161718192021222324#include <stdio.h> struct Address { char street[50]; char city[50]; char index[10]; }; struct Person { char name[50]; int age; struct Address address; // nested structure }; int main() { struct Address addr = {"Baker Street", "London", "221B"}; struct Person person = {"Sherlock Holmes", 27, addr}; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }
Tässä Address määritellään itsenäisesti erillään Person-rakenteesta, joten sitä voidaan käyttää itsenäisesti tai useissa eri rakenteissa. Kun alustetaan Person, annetaan Address-kenttään address-instanssi. Sisäkkäisiin kenttiin päästään käsiksi samalla tavalla käyttäen person.address. Tämä lähestymistapa on joustavampi ja edistää koodin uudelleenkäyttöä sekä modulaarista suunnittelua.
Swipe to start coding
Jokainen tuote esitetään rakenteella Product, joka sisältää sisäkkäisen rakenteen Manufacturer. Funktion tulee käydä läpi tuotteiden taulukko, tarkistaa kuuluuko tuote määritellylle valmistajalle, ja laskea yhteen kaikkien vastaavien tuotteiden kokonaisarvo (price * quantity).
Toteuta funktio calculateManufacturerTotal, jonka paluuarvotyyppi on float.
- Luo funktion sisälle
float-tyyppinen muuttujatotalja aseta sen arvoksi0.0f. - Käytä
for-silmukkaa, joka käy tuotteiden taulukon läpi indeksistä0arvoonn. - Jokaiselle tuotteelle vertaa tuotteen
manufacturer.companyName-kenttää parametrina annettuuncompanyName-arvoon käyttäenstrcmp-funktiota. - Jos nimet täsmäävät, lisää
price * quantitymuuttujaantotal. - Palauta lopuksi muuttujan
totalarvo.
Ratkaisu
Kiitos palautteestasi!
single