Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Nästlade Strukturer | Avancerad Användning av Structar
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Behärska C-Strukturer

bookNä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

main.c

copy
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

main.c

copy
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.

Uppgift

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.

  1. Skapa inuti funktionen en float-variabel total som initieras till 0.0f.
  2. Använd en for-loop för att iterera över arrayen av produkter från 0 till n.
  3. För varje produkt, jämför produktens manufacturer.companyName med parametern companyName med hjälp av strcmp.
  4. Om det stämmer, addera price * quantity till total.
  5. Returnera det slutliga värdet av total.

Lösning

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 1
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

close

bookNä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

main.c

copy
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

main.c

copy
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.

Uppgift

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.

  1. Skapa inuti funktionen en float-variabel total som initieras till 0.0f.
  2. Använd en for-loop för att iterera över arrayen av produkter från 0 till n.
  3. För varje produkt, jämför produktens manufacturer.companyName med parametern companyName med hjälp av strcmp.
  4. Om det stämmer, addera price * quantity till total.
  5. Returnera det slutliga värdet av total.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 1
single

single

some-alt