Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Struct Annidate | Uso Avanzato delle Struct
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Padronanza delle Struct in C

bookStruct Annidate

In C, le strutture possono contenere altre strutture come membri, oltre a tipi di base come int o char, array e puntatori. Le strutture annidate sono utili quando si desidera raggruppare dati correlati in modo logico.

Struttura Annidata Incorporata

Una struttura annidata incorporata viene dichiarata direttamente all'interno della struttura esterna. Questo significa che la struttura annidata esiste solo all'interno della struttura esterna e non può essere utilizzata altrove.

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 questo esempio, la struttura Address è definita all'interno di Person, quindi esiste solo nel contesto della struttura Person. È possibile accedere ai campi della struttura annidata utilizzando person.address, che consente di recuperare street, city e index. Questo approccio è conveniente quando i dati annidati sono specifici di una singola struttura esterna e non devono essere riutilizzati altrove.

Struttura Annidata Separata

Una struttura annidata separata viene dichiarata indipendentemente e poi inclusa nella struttura esterna. Questo consente di riutilizzare la struttura annidata in più strutture esterne o di istanziarla separatamente.

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

Qui, Address è dichiarato indipendentemente da Person, quindi può essere utilizzato da solo o all'interno di più strutture. Quando si inizializza un Person, si assegna un'istanza di Address al campo address. L'accesso ai campi annidati avviene allo stesso modo utilizzando person.address. Questo approccio è più flessibile e favorisce il riutilizzo del codice e un design modulare.

Compito

Swipe to start coding

Ogni prodotto è rappresentato da una struttura Product che contiene una struttura annidata Manufacturer. La funzione deve iterare su un array di prodotti, verificare se il prodotto appartiene al produttore specificato e sommare il valore totale (price * quantity) di tutti i prodotti corrispondenti.

Implementare una funzione calculateManufacturerTotal con tipo di ritorno float.

  1. All'interno della funzione, creare una variabile float chiamata total inizializzata a 0.0f.
  2. Utilizzare un ciclo for per iterare sull'array di prodotti da 0 a n.
  3. Per ogni prodotto, confrontare il campo manufacturer.companyName del prodotto con il parametro companyName utilizzando strcmp.
  4. Se corrisponde, aggiungere price * quantity a total.
  5. Restituire il valore finale di total.

Soluzione

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

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

bookStruct Annidate

Scorri per mostrare il menu

In C, le strutture possono contenere altre strutture come membri, oltre a tipi di base come int o char, array e puntatori. Le strutture annidate sono utili quando si desidera raggruppare dati correlati in modo logico.

Struttura Annidata Incorporata

Una struttura annidata incorporata viene dichiarata direttamente all'interno della struttura esterna. Questo significa che la struttura annidata esiste solo all'interno della struttura esterna e non può essere utilizzata altrove.

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 questo esempio, la struttura Address è definita all'interno di Person, quindi esiste solo nel contesto della struttura Person. È possibile accedere ai campi della struttura annidata utilizzando person.address, che consente di recuperare street, city e index. Questo approccio è conveniente quando i dati annidati sono specifici di una singola struttura esterna e non devono essere riutilizzati altrove.

Struttura Annidata Separata

Una struttura annidata separata viene dichiarata indipendentemente e poi inclusa nella struttura esterna. Questo consente di riutilizzare la struttura annidata in più strutture esterne o di istanziarla separatamente.

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

Qui, Address è dichiarato indipendentemente da Person, quindi può essere utilizzato da solo o all'interno di più strutture. Quando si inizializza un Person, si assegna un'istanza di Address al campo address. L'accesso ai campi annidati avviene allo stesso modo utilizzando person.address. Questo approccio è più flessibile e favorisce il riutilizzo del codice e un design modulare.

Compito

Swipe to start coding

Ogni prodotto è rappresentato da una struttura Product che contiene una struttura annidata Manufacturer. La funzione deve iterare su un array di prodotti, verificare se il prodotto appartiene al produttore specificato e sommare il valore totale (price * quantity) di tutti i prodotti corrispondenti.

Implementare una funzione calculateManufacturerTotal con tipo di ritorno float.

  1. All'interno della funzione, creare una variabile float chiamata total inizializzata a 0.0f.
  2. Utilizzare un ciclo for per iterare sull'array di prodotti da 0 a n.
  3. Per ogni prodotto, confrontare il campo manufacturer.companyName del prodotto con il parametro companyName utilizzando strcmp.
  4. Se corrisponde, aggiungere price * quantity a total.
  5. Restituire il valore finale di total.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1
single

single

some-alt