16.1. Modèle de structure

Icône de l'outil pédagogique Modèle de structure

 

On souhaite par exemple caractériser des personnes à l'aide de leurs nom, prénom et année de naissance. On crée donc un type structuré T_personne décrit par un modèle qui permet de regrouper ces informations :

Le mot‐clé typedef permet de définir un nouveau type (d'autres exemples d'utilisation en sont donnés au chapitre Simplifications d’écriture). Ici, il s'agit d'un type structuré, comme l'indique le mot‐clé struct qui commence la description de la structure. Celle‐ci se termine par le nom du type structuré (ici T_personne). Les éléments entre accolades sont appelés les champs de la structure : ils sont caractérisés par leur type et leur nom.

L'ordre des champs est quelconque, mais il est conseillé pour faciliter l'initialisation de mettre en premier les champs associés aux "données d'entrée", puis les champs des "données intermédiaires", enfin les champs associés aux "données de sortie" (ceux qui sont calculés par le programme).

Ce modèle n'est pas une définition de variable ; il se contente de décrire la structure, tout comme un plan de maison décrit la future construction. Il n'y a donc aucune réservation mémoire pour l'instant. Mais on dispose à présent d'un nouveau type qui s'ajoute aux types prédéfinis du Langage C (int, double...).

Ce modèle de structure est en général placé au début du fichier, en dehors de toute fonction, ou mieux dans un fichier en‐tête *.h. Voir l’exemple à la fin du chapitre.

Voici un autre exemple, avec ce modèle de structure T_adresse qui permet de rassembler les éléments d'une adresse :

Voici enfin un exemple de structure qui possède un champ de type tableau (cas fréquent en informatique). Ce modèle de structure T_enfants permet de rassembler les informations concernant les enfants d'une famille :


 


 

Remarque :

On peut définir un type structuré sans utiliser typedef, mais ce n'est pas conseillé pour la légèreté des écritures. En effet, au lieu du nom T_adresse, le modèle de structure ci‐dessous oblige à utiliser le nom composé struct t_adresse (les deux mots ne peuvent jamais être dissociés dans le nom du type !) :