Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Structures Imbriquées | Utilisation Avancée des Structs
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Maîtriser les Structs en C

bookStructures 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

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

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

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

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.

Tâche

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.

  1. À l'intérieur de la fonction, créer une variable float nommée total initialisée à 0.0f.
  2. Utiliser une boucle for pour parcourir le tableau de produits de 0 à n.
  3. Pour chaque produit, comparer le champ manufacturer.companyName du produit avec le paramètre companyName à l'aide de strcmp.
  4. Si cela correspond, ajouter price * quantity à total.
  5. Retourner la valeur finale de total.

Solution

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 1
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

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

bookStructures 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

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

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

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

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.

Tâche

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.

  1. À l'intérieur de la fonction, créer une variable float nommée total initialisée à 0.0f.
  2. Utiliser une boucle for pour parcourir le tableau de produits de 0 à n.
  3. Pour chaque produit, comparer le champ manufacturer.companyName du produit avec le paramètre companyName à l'aide de strcmp.
  4. Si cela correspond, ajouter price * quantity à total.
  5. Retourner la valeur finale de total.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 1
single

single

some-alt