Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Indlejrede Structs | Avanceret Brug af Structs
Beherskelse af C Structs

bookIndlejrede Structs

I C kan strukturer indeholde andre strukturer som medlemmer, ud over basale typer som int eller char, arrays og pointere. Indlejrede strukturer er nyttige, når du ønsker at gruppere relaterede data på en logisk måde.

Indlejret indre struktur

En indlejret indre struktur deklareres direkte inde i den ydre struktur. Dette betyder, at den indre struktur kun eksisterer inden for den ydre struktur og ikke kan bruges andre steder.

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 dette eksempel er Address-strukturen defineret inde i Person, så den eksisterer kun i konteksten af Person-strukturen. Du kan få adgang til felterne i den indlejrede struktur ved at bruge person.address, hvilket gør det muligt at hente street, city og index. Denne tilgang er praktisk, når de indlejrede data er specifikke for en enkelt ydre struktur og ikke behøver at blive genbrugt andre steder.

Separat indlejret struktur

En separat indlejret struktur erklæres uafhængigt og inkluderes derefter i den ydre struktur. Dette gør det muligt at genbruge den indlejrede struktur i flere ydre strukturer eller at instantiere 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; }

Her erklæres Address uafhængigt af Person, så den kan bruges alene eller indgå i flere strukturer. Når en Person initialiseres, tildeles en Address-instans til feltet address. Adgang til de indlejrede felter foregår på samme måde ved at bruge person.address. Denne tilgang er mere fleksibel og fremmer genbrug af kode samt modulært design.

Opgave

Swipe to start coding

Hvert produkt repræsenteres af en struktur Product, der indeholder en indlejret struktur Manufacturer. Funktionen skal iterere over et array af produkter, kontrollere om produktet tilhører den angivne producent, og summere den samlede værdi (price * quantity) af alle matchende produkter.

Implementér en funktion calculateManufacturerTotal med returtypen float.

  1. Opret inden i funktionen en float-variabel total, initialiseret til 0.0f.
  2. Brug en for-løkke til at iterere over arrayet af produkter fra 0 til n.
  3. For hvert produkt sammenlignes produktets manufacturer.companyName med parameteren companyName ved hjælp af strcmp.
  4. Hvis der er et match, lægges price * quantity til total.
  5. Returnér den endelige værdi af total.

Løsning

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 1
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

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?

close

bookIndlejrede Structs

Stryg for at vise menuen

I C kan strukturer indeholde andre strukturer som medlemmer, ud over basale typer som int eller char, arrays og pointere. Indlejrede strukturer er nyttige, når du ønsker at gruppere relaterede data på en logisk måde.

Indlejret indre struktur

En indlejret indre struktur deklareres direkte inde i den ydre struktur. Dette betyder, at den indre struktur kun eksisterer inden for den ydre struktur og ikke kan bruges andre steder.

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 dette eksempel er Address-strukturen defineret inde i Person, så den eksisterer kun i konteksten af Person-strukturen. Du kan få adgang til felterne i den indlejrede struktur ved at bruge person.address, hvilket gør det muligt at hente street, city og index. Denne tilgang er praktisk, når de indlejrede data er specifikke for en enkelt ydre struktur og ikke behøver at blive genbrugt andre steder.

Separat indlejret struktur

En separat indlejret struktur erklæres uafhængigt og inkluderes derefter i den ydre struktur. Dette gør det muligt at genbruge den indlejrede struktur i flere ydre strukturer eller at instantiere 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; }

Her erklæres Address uafhængigt af Person, så den kan bruges alene eller indgå i flere strukturer. Når en Person initialiseres, tildeles en Address-instans til feltet address. Adgang til de indlejrede felter foregår på samme måde ved at bruge person.address. Denne tilgang er mere fleksibel og fremmer genbrug af kode samt modulært design.

Opgave

Swipe to start coding

Hvert produkt repræsenteres af en struktur Product, der indeholder en indlejret struktur Manufacturer. Funktionen skal iterere over et array af produkter, kontrollere om produktet tilhører den angivne producent, og summere den samlede værdi (price * quantity) af alle matchende produkter.

Implementér en funktion calculateManufacturerTotal med returtypen float.

  1. Opret inden i funktionen en float-variabel total, initialiseret til 0.0f.
  2. Brug en for-løkke til at iterere over arrayet af produkter fra 0 til n.
  3. For hvert produkt sammenlignes produktets manufacturer.companyName med parameteren companyName ved hjælp af strcmp.
  4. Hvis der er et match, lægges price * quantity til total.
  5. Returnér den endelige værdi af total.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 1
single

single

some-alt