single
Sisäkkäiset Rakenteet
Pyyhkäise näyttääksesi valikon
C-kielessä rakenteet voivat sisältää muita rakenteita jäseniä, 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ällä. 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, jonka avulla voidaan hakea street, city ja index. Tämä lähestymistapa on kätevä, kun sisäkkäinen tieto liittyy vain yhteen ulompaan 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 ulompaan rakenteeseen. Tämä mahdollistaa sisäkkäisen rakenteen uudelleenkäytön useissa ulommissa rakenteissa tai sen itsenäisen käytön.
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ää sellaisenaan tai useissa eri rakenteissa. Kun alustetaan Person, Address-kenttään annetaan 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.
Pyyhkäise aloittaaksesi koodauksen
Jokainen tuote esitetään rakenteella Product, joka sisältää sisäkkäisen rakenteen Manufacturer. Funktion tulee käydä läpi tuote-taulukko, tarkistaa kuuluuko tuote määritellylle valmistajalle, ja laskea yhteen kaikkien täsmäävien tuotteiden kokonaisarvo (price * quantity).
Toteuta funktio calculateManufacturerTotal, jonka paluuarvotyyppi on float.
- Luo funktion sisällä
float-tyyppinen muuttujatotalja aseta sen arvoksi0.0f. - Käytä
for-silmukkaa, joka käy tuotteet läpi indeksistä0arvoonnasti. - 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