Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Geneste Structs | Geavanceerd Gebruik van Structs
C-Structs Beheersen

bookGeneste Structs

In C kunnen structuren andere structuren als leden bevatten, naast basistypen zoals int of char, arrays en pointers. Geneste structuren zijn nuttig wanneer u gerelateerde gegevens op een logische manier wilt groeperen.

Ingebedde geneste structuur

Een ingebedde geneste structuur wordt direct binnen de buitenste structuur gedeclareerd. Dit betekent dat de geneste structuur alleen binnen de buitenste structuur bestaat en niet elders kan worden gebruikt.

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; }

In dit voorbeeld wordt de structuur Address gedefinieerd binnen Person, waardoor deze alleen bestaat binnen de context van de structuur Person. Je kunt de velden van de geneste structuur benaderen via person.address, waarmee je toegang krijgt tot street, city en index. Deze aanpak is handig wanneer de geneste gegevens specifiek zijn voor één enkele buitenste structuur en niet elders hoeven te worden hergebruikt.

Afzonderlijke Geneste Structuur

Een afzonderlijke geneste structuur wordt onafhankelijk gedeclareerd en vervolgens opgenomen in de buitenste structuur. Hierdoor kan de geneste structuur in meerdere buitenste structuren worden hergebruikt of afzonderlijk worden geïnstantieerd.

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; }

Hier wordt Address onafhankelijk van Person gedeclareerd, zodat het zowel zelfstandig als binnen meerdere structuren kan worden gebruikt. Bij het initialiseren van een Person wijzen we een Address-instantie toe aan het address-veld. Het benaderen van de geneste velden gebeurt op dezelfde manier via person.address. Deze aanpak is flexibeler en bevordert hergebruik van code en een modulaire opzet.

Taak

Swipe to start coding

Elk product wordt weergegeven door een structuur Product die een geneste structuur Manufacturer bevat. De functie moet over een array van producten itereren, controleren of het product tot de opgegeven fabrikant behoort, en de totale waarde (price * quantity) van alle overeenkomende producten optellen.

Implementeer een functie calculateManufacturerTotal met het retourtype float.

  1. Maak binnen de functie een float-variabele total en initialiseer deze met 0.0f.
  2. Gebruik een for-lus om over de array van producten van 0 tot n te itereren.
  3. Vergelijk voor elk product de manufacturer.companyName van het product met de parameter companyName met behulp van strcmp.
  4. Als deze overeenkomen, tel dan price * quantity op bij total.
  5. Retourneer de uiteindelijke waarde van total.

Oplossing

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 1
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

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

bookGeneste Structs

Veeg om het menu te tonen

In C kunnen structuren andere structuren als leden bevatten, naast basistypen zoals int of char, arrays en pointers. Geneste structuren zijn nuttig wanneer u gerelateerde gegevens op een logische manier wilt groeperen.

Ingebedde geneste structuur

Een ingebedde geneste structuur wordt direct binnen de buitenste structuur gedeclareerd. Dit betekent dat de geneste structuur alleen binnen de buitenste structuur bestaat en niet elders kan worden gebruikt.

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; }

In dit voorbeeld wordt de structuur Address gedefinieerd binnen Person, waardoor deze alleen bestaat binnen de context van de structuur Person. Je kunt de velden van de geneste structuur benaderen via person.address, waarmee je toegang krijgt tot street, city en index. Deze aanpak is handig wanneer de geneste gegevens specifiek zijn voor één enkele buitenste structuur en niet elders hoeven te worden hergebruikt.

Afzonderlijke Geneste Structuur

Een afzonderlijke geneste structuur wordt onafhankelijk gedeclareerd en vervolgens opgenomen in de buitenste structuur. Hierdoor kan de geneste structuur in meerdere buitenste structuren worden hergebruikt of afzonderlijk worden geïnstantieerd.

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; }

Hier wordt Address onafhankelijk van Person gedeclareerd, zodat het zowel zelfstandig als binnen meerdere structuren kan worden gebruikt. Bij het initialiseren van een Person wijzen we een Address-instantie toe aan het address-veld. Het benaderen van de geneste velden gebeurt op dezelfde manier via person.address. Deze aanpak is flexibeler en bevordert hergebruik van code en een modulaire opzet.

Taak

Swipe to start coding

Elk product wordt weergegeven door een structuur Product die een geneste structuur Manufacturer bevat. De functie moet over een array van producten itereren, controleren of het product tot de opgegeven fabrikant behoort, en de totale waarde (price * quantity) van alle overeenkomende producten optellen.

Implementeer een functie calculateManufacturerTotal met het retourtype float.

  1. Maak binnen de functie een float-variabele total en initialiseer deze met 0.0f.
  2. Gebruik een for-lus om over de array van producten van 0 tot n te itereren.
  3. Vergelijk voor elk product de manufacturer.companyName van het product met de parameter companyName met behulp van strcmp.
  4. Als deze overeenkomen, tel dan price * quantity op bij total.
  5. Retourneer de uiteindelijke waarde van total.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 1
single

single

some-alt