Structures Imbriquées
En C, les structures peuvent contenir d'autres structures en tant que membres, en plus des types de base comme int ou char, des tableaux et des pointeurs. Les structures imbriquées sont utiles pour regrouper des données liées de manière logique.
Structure imbriquée intégrée
Une structure imbriquée intégrée est déclarée directement à l'intérieur de la structure externe. Cela signifie que la structure imbriquée n'existe qu'au sein de la structure externe et ne peut pas être utilisée ailleurs.
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; }
Dans cet exemple, la structure Address est définie à l'intérieur de Person, elle n'existe donc que dans le contexte de la structure Person. Vous pouvez accéder aux champs de la structure imbriquée en utilisant person.address, ce qui permet de récupérer street, city et index. Cette approche est pratique lorsque les données imbriquées sont spécifiques à une seule structure externe et n'ont pas besoin d'être réutilisées ailleurs.
Structure imbriquée séparée
Une structure imbriquée séparée est déclarée indépendamment puis incluse dans la structure externe. Cela permet de réutiliser la structure imbriquée dans plusieurs structures externes ou de l'instancier séparément.
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; }
Ici, Address est déclaré indépendamment de Person, ce qui permet de l'utiliser seul ou à l'intérieur de plusieurs structures. Lors de l'initialisation d'un Person, on assigne une instance de Address au champ address. L'accès aux champs imbriqués fonctionne de la même manière en utilisant person.address. Cette approche est plus flexible et favorise la réutilisation du code ainsi qu'une conception modulaire.
Swipe to start coding
Chaque produit est représenté par une structure Product qui contient une structure imbriquée Manufacturer. La fonction doit parcourir un tableau de produits, vérifier si le produit appartient au fabricant spécifié, puis additionner la valeur totale (price * quantity) de tous les produits correspondants.
Implémenter une fonction calculateManufacturerTotal avec un type de retour float.
- À l'intérieur de la fonction, créer une variable
floatnomméetotalinitialisée à0.0f. - Utiliser une boucle
forpour parcourir le tableau de produits de0àn. - Pour chaque produit, comparer le champ
manufacturer.companyNamedu produit avec le paramètrecompanyNameà l'aide destrcmp. - Si cela correspond, ajouter
price * quantityàtotal. - Retourner la valeur finale de
total.
Solution
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
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?
Génial!
Completion taux amélioré à 4.35
Structures Imbriquées
Glissez pour afficher le menu
En C, les structures peuvent contenir d'autres structures en tant que membres, en plus des types de base comme int ou char, des tableaux et des pointeurs. Les structures imbriquées sont utiles pour regrouper des données liées de manière logique.
Structure imbriquée intégrée
Une structure imbriquée intégrée est déclarée directement à l'intérieur de la structure externe. Cela signifie que la structure imbriquée n'existe qu'au sein de la structure externe et ne peut pas être utilisée ailleurs.
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; }
Dans cet exemple, la structure Address est définie à l'intérieur de Person, elle n'existe donc que dans le contexte de la structure Person. Vous pouvez accéder aux champs de la structure imbriquée en utilisant person.address, ce qui permet de récupérer street, city et index. Cette approche est pratique lorsque les données imbriquées sont spécifiques à une seule structure externe et n'ont pas besoin d'être réutilisées ailleurs.
Structure imbriquée séparée
Une structure imbriquée séparée est déclarée indépendamment puis incluse dans la structure externe. Cela permet de réutiliser la structure imbriquée dans plusieurs structures externes ou de l'instancier séparément.
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; }
Ici, Address est déclaré indépendamment de Person, ce qui permet de l'utiliser seul ou à l'intérieur de plusieurs structures. Lors de l'initialisation d'un Person, on assigne une instance de Address au champ address. L'accès aux champs imbriqués fonctionne de la même manière en utilisant person.address. Cette approche est plus flexible et favorise la réutilisation du code ainsi qu'une conception modulaire.
Swipe to start coding
Chaque produit est représenté par une structure Product qui contient une structure imbriquée Manufacturer. La fonction doit parcourir un tableau de produits, vérifier si le produit appartient au fabricant spécifié, puis additionner la valeur totale (price * quantity) de tous les produits correspondants.
Implémenter une fonction calculateManufacturerTotal avec un type de retour float.
- À l'intérieur de la fonction, créer une variable
floatnomméetotalinitialisée à0.0f. - Utiliser une boucle
forpour parcourir le tableau de produits de0àn. - Pour chaque produit, comparer le champ
manufacturer.companyNamedu produit avec le paramètrecompanyNameà l'aide destrcmp. - Si cela correspond, ajouter
price * quantityàtotal. - Retourner la valeur finale de
total.
Solution
Merci pour vos commentaires !
single