Langage de programmation C (VIII). Structures de données (II)
1991/10/01 Alegria Loinaz, Iñaki | Maritxalar, Montse Iturria: Elhuyar aldizkaria
STRUCTURES, EMBALLAGES ET ÉNUMÉRÉS
SYNONYMES
Le chapitre précédent a commencé à analyser les données structurées, dans lesquelles des tableaux et des démonstrateurs ont été exposés. À cette occasion, nous analyserons trois nouveaux types de données: structures ou enregistrements, textures et énumérés.
Structures
Alors que dans la table toutes les données sont du même type, dans la structure ou l'enregistrement il y a un ensemble de données qui ne doivent pas être du même type. Les données qui composent la structure correspondent à un lecteur ou un élément, le type de données le plus commun qui est stocké sur le disque. Dans le fichier de la bibliothèque, par exemple, il y a un enregistrement (ou une structure) de chaque livre, où il y a du code, titre, écrivain, nombre de pages, etc. (données de type différent).
![](images/A52033.jpg)
Puisqu'il est impossible d'utiliser un index pour déterminer une donnée dans la structure par rapport aux tables, chaque donnée ou champ est attribué un nom, de sorte que pour identifier une donnée il faut spécifier la structure et les noms du champ.
Le langage C utilise le mot-clé et l’opérateur “struct” pour gérer les structures.
Comme dans d'autres types de données, nous différencierons la définition et l'utilisation des structures, mais dans ce cas la définition se fera en deux étapes, car alors que dans le premier on définit la structure abstraite avec les champs correspondants (définition de la structure), dans le second on définira la variable (s) de ce type.
Dans le programme 1, nous définissons et utilisons l'enregistrement du fichier de la bibliothèque.
Ainsi, comme vous pouvez le constater, les noms et les types des champs de la définition de la structure apparaissent entre les différents rois et}, struct et nom devant et derrière. Dans l'utilisation, au contraire, une fois définie initialement la variable de ce type, on spécifie la variable de représentation des champs, l'opérateur • et le nom du champ.
Si deux variables du même type de structure existent, l'assignation entre elles avec des compilateurs est possible par une seule assignation, tandis qu'avec d'autres elle doit être complétée zonalement. Cependant, contrairement aux tableaux, le nom d'une variable de type structurel indique sa valeur et non sa référence. Par conséquent, lors de la détermination d'une structure en paramètre, vous serez préalablement spécifié et ce qui sera échangé sera votre index.
Structures et démonstrateurs
Des structures et des démonstrateurs peuvent être combinés. D'une part, le composant d'une structure peut être un démonstrateur et, d'autre part, comme déjà mentionné précédemment, dans la structure sont utilisés démonstratifs, surtout dans les appels de fonctions.
A titre d'exemple, pensons que pour écrire la structure précédente, celle de la bibliothèque, nous avons une fonction et comme paramètre la référence de la structure du livre. Cette fonction est définie dans le programme 2 et au lieu d'utiliser l'opérateur • l'opérateur Aperçu sera utilisé car (* démonstrateur). le champ et le champ des démonstrateurs sont équivalents à C. Dans le premier programme, la commande printf sera remplacée par l'appel suivant :
print_lib_bat ( liburu)
Structures creusées
![](images/A52033-b.jpg)
L'utilisation de démonstrateurs structuraux permet de référencer dans une structure une autre variable de la même structure. Ceci est très utilisé pour définir et utiliser des listes, des lignes, des piles, etc.
Le programme 3 présente une structure et une fonction utilisées pour définir l'arbre binaire de strings. La fonction écrit l'arbre de gauche à droite en utilisant l'algorithme récursif.
![](images/A52033-a.jpg)
Emballages
Les mêmes agents analysés dans les structures de définition et d'utilisation des emballages (. Malgré l'utilisation de - ), l'objectif de ce type de données est radicalement différent, puisque bien que les champs décrits dans les deux peuvent être de type différent, dans les recueils ces champs sont des interprétations différentes du type correspondant à un seul champ, tandis que dans les structures sont des composantes d'un ensemble. Par conséquent, lors de la lecture d'une donnée de type compilation, vous ne pouvez utiliser qu'un seul des champs définis. Bien que ce type soit peu utilisé, son utilisation la plus répandue est due au fait que moins de mémoire est dépensée pour traiter la lecture d'un fichier comme un type différent de données. Par exemple, un morceau de memori de 80 octets est imprimé dans le programme 4, mais selon un code il y a 80 caractères ou 20 nombres entiers.
![](images/A52033-c.jpg)
Comme on le voit dans le programme, les enveloppes peuvent être combinées avec des présentoirs et des panneaux. De cette façon, l'index d'une collecte a été envoyé à la fonction et les champs de la collecte sont des tables. Les enveloppes peuvent également être combinées avec des structures, car il est possible qu'au sein d'une structure il y ait des structures dans l'enveloppe.
Énumérés
Ce type de données est utilisé lorsque la valeur possible d'une variable est l'un des composants d'un groupe court. Ce qui est fait dans ce type peut être fait avec des caractères ou des nombres entiers (attribuant un code à chaque valeur), mais pour que le programme soit lisible, un type de données très approprié se produit. La définition de la liste se compose du mot clé enum, du nom du type et des valeurs possibles, séparés par des virgules et entre des clés.
Dans le programme 5, vous pouvez voir votre application avec une fonction qui applique un tarif différent selon le jour de la semaine:
![](images/A52033-d.jpg)
Comme nous l'avons dit précédemment, C n'a pas la capacité de définir de nouveaux types de données, mais quelque chose de similaire peut être fait avec la possibilité de définir des synonymes par l'opérateur typedef.
Avec cette méthode, les programmes améliorent la lisibilité, mais aucun nouveau type de données réel n'est créé, car la seule conclusion est qu'en temps de compilation, il s'agit d'une simple traduction de strings
De cette façon, vous pouvez définir le type de données booléenne comme vous pouvez le voir dans le programme 6:
![](images/A52033-e.jpg)
![](https://elia.eus/static/elhuyar/img/elia_RGB.png)
Gai honi buruzko eduki gehiago
Elhuyarrek garatutako teknologia