Nästlade Strukturer
I C kan strukturer innehålla andra strukturer som medlemmar, utöver grundläggande typer som int eller char, arrayer och pekare. Nästa strukturer är användbara när du vill gruppera relaterad data på ett logiskt sätt.
Inbäddad nästlad struktur
En inbäddad nästlad struktur deklareras direkt inuti den yttre strukturen. Detta innebär att den nästlade strukturen endast existerar inom den yttre strukturen och inte kan användas någon annanstans.
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; }
I det här exemplet definieras strukturen Address inuti Person, så den existerar endast i kontexten av strukturen Person. Du kan komma åt fälten i den nästlade strukturen med person.address, vilket gör det möjligt att hämta street, city och index. Detta tillvägagångssätt är lämpligt när de nästlade uppgifterna är specifika för en enskild yttre struktur och inte behöver återanvändas på andra ställen.
Separat nästlad struktur
En separat nästlad struktur deklareras oberoende och inkluderas sedan i den yttre strukturen. Detta gör det möjligt att återanvända den nästlade strukturen i flera yttre strukturer eller instansiera den separat.
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; }
Här deklareras Address oberoende av Person, vilket innebär att den kan användas separat eller inuti flera strukturer. Vid initiering av en Person tilldelas en instans av Address till fältet address. Åtkomst till de nästlade fälten sker på samma sätt med hjälp av person.address. Denna metod är mer flexibel och uppmuntrar till återanvändning av kod samt modulär design.
Swipe to start coding
Varje produkt representeras av en struktur Product som innehåller en nästlad struktur Manufacturer. Funktionen ska iterera över en array av produkter, kontrollera om produkten tillhör den angivna tillverkaren och summera det totala värdet (price * quantity) för alla matchande produkter.
Implementera en funktion calculateManufacturerTotal med returtypen float.
- Skapa inuti funktionen en
float-variabeltotalsom initieras till0.0f. - Använd en
for-loop för att iterera över arrayen av produkter från0tilln. - För varje produkt, jämför produktens
manufacturer.companyNamemed parameterncompanyNamemed hjälp avstrcmp. - Om det stämmer, addera
price * quantitytilltotal. - Returnera det slutliga värdet av
total.
Lösning
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Fantastiskt!
Completion betyg förbättrat till 4.35
Nästlade Strukturer
Svep för att visa menyn
I C kan strukturer innehålla andra strukturer som medlemmar, utöver grundläggande typer som int eller char, arrayer och pekare. Nästa strukturer är användbara när du vill gruppera relaterad data på ett logiskt sätt.
Inbäddad nästlad struktur
En inbäddad nästlad struktur deklareras direkt inuti den yttre strukturen. Detta innebär att den nästlade strukturen endast existerar inom den yttre strukturen och inte kan användas någon annanstans.
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; }
I det här exemplet definieras strukturen Address inuti Person, så den existerar endast i kontexten av strukturen Person. Du kan komma åt fälten i den nästlade strukturen med person.address, vilket gör det möjligt att hämta street, city och index. Detta tillvägagångssätt är lämpligt när de nästlade uppgifterna är specifika för en enskild yttre struktur och inte behöver återanvändas på andra ställen.
Separat nästlad struktur
En separat nästlad struktur deklareras oberoende och inkluderas sedan i den yttre strukturen. Detta gör det möjligt att återanvända den nästlade strukturen i flera yttre strukturer eller instansiera den separat.
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; }
Här deklareras Address oberoende av Person, vilket innebär att den kan användas separat eller inuti flera strukturer. Vid initiering av en Person tilldelas en instans av Address till fältet address. Åtkomst till de nästlade fälten sker på samma sätt med hjälp av person.address. Denna metod är mer flexibel och uppmuntrar till återanvändning av kod samt modulär design.
Swipe to start coding
Varje produkt representeras av en struktur Product som innehåller en nästlad struktur Manufacturer. Funktionen ska iterera över en array av produkter, kontrollera om produkten tillhör den angivna tillverkaren och summera det totala värdet (price * quantity) för alla matchande produkter.
Implementera en funktion calculateManufacturerTotal med returtypen float.
- Skapa inuti funktionen en
float-variabeltotalsom initieras till0.0f. - Använd en
for-loop för att iterera över arrayen av produkter från0tilln. - För varje produkt, jämför produktens
manufacturer.companyNamemed parameterncompanyNamemed hjälp avstrcmp. - Om det stämmer, addera
price * quantitytilltotal. - Returnera det slutliga värdet av
total.
Lösning
Tack för dina kommentarer!
single