16.5.2 Passage en paramètre de variables structurées

Icône de l'outil pédagogique Passage en paramètre de variables structurées

L'utilisation de variables structurées rend le programme beaucoup plus évolutif : on peut à tout moment ajouter un champ supplémentaire dans le modèle de structure, sans modifier les appels, les prototypes et les en‐tête de fonctions ; seuls les corps des fonctions qui utilisent le champ rajouté seront à compléter.

La norme ISO actuelle autorise :

– la transmission en paramètre d'une variable structurée par valeur (la fonction ne manipule que la copie de la valeur) ou par adresse (la fonction peut modifier la variable originale en utilisant un pointeur) ;

– le renvoi par une fonction d'une valeur de type structurée.

Dans les anciens compilateurs, seule la transmission par adresse des structures était autorisée (comme pour les tableaux). Une valeur retournée de type structurée était aussi interdite.

En dépit de la nouvelle norme ISO, il reste conseillé de transmettre PAR ADRESSE les variables structurées. Le programme est plus évolutif, puisque chaque fonction peut accéder en lecture comme en écriture aux variables structurées transmises par adresse. Evitez aussi d’utiliser une valeur de retour structurée.

Dans le cas d'un passage de paramètre par adresse, la fonction appelée récupère une adresse de variable structurée, c'est‐à‐dire un pointeur sur une structure. Un tel pointeur se définit par nom_type_struct *ptr.
L'accès aux champs de la structure (voir dessin) se fait ensuite simplement à l'aide de l'opérateur flèche ‐> :

ptr‐>champ

Exemple 92 : Passage en paramètre d'une structure

(voir dessin plus bas et l’exemple complet avec fichier en-tête en fin de chapitre)

Figure 16 ‐‐8 : Accès à un champ de structure (direct ou indirect)