Langage de programmation C (VII). Structures de données (I)
1991/09/01 Alegria Loinaz, Iñaki | Maritxalar, Montse Iturria: Elhuyar aldizkaria
Comme indiqué au chapitre 2, les données de base de C sont des caractères, des nombres entiers et des nombres réels. En outre, les types de données suivants peuvent être utilisés dans la rédaction des programmes C : tableaux, démonstratifs, structures, textures et énumérés. D'autre part, alors que dans des langages comme le PASCAL de haut niveau, on peut définir de nouveaux types de données, C ne l'admet pas, même si l'expression typedef permet de définir des synonymes de types de données. Par conséquent, dans ce chapitre et dans le suivant nous exposerons la définition et l'utilisation des types de données et synonymes mentionnés.
Tableaux et démonstrateurs
La table est la structure de données la plus utilisée dans n'importe quelle langue. Les mots vecteur, matrice, tableau, chaîne et chaîne sont utilisés comme synonyme de table, bien qu'ils ne soient pas parfois des sous-types de table.
La table est composée d'un ensemble de variables du même type qui sont enregistrées et connues sous le même nom. La table peut avoir une ou plusieurs dimensions, appelées dans le premier cas vecteurs. Les deux dimensions sont appelées matrices et lorsqu'un index est utilisé pour identifier les composants du vecteur, deux index sont utilisés dans les tableaux.
Lorsque les composants de la table sont des caractères, la table est appelée chaîne de caractères, chaîne ou chaîne, avec des caractéristiques différentes.
Définition et utilisation des tables
Le type de données des composants pour la définition des tables, le nom de la table et le nombre de composants doivent être spécifiés dans la plage. Dans l'utilisation, seul le nom de la table est mentionné pour désigner le tableau complet. Pour exprimer un composant, au contraire, il faut mentionner le nom et l'index entre les cartes. L'index indique la position dans la table du composant, mais tandis que dans la plupart des langages la plage de valeur de l'index est de un au nombre de composants (N), en C est utilisé à partir de zéro (N-1). Notez que l'index qui est déterminé dans la plage peut être une expression complète; constante, variable ou combinaison arithmétique entre elles.
Dans le programme 1, on peut voir un exemple dans lequel après avoir lu les ventes de 12 mois dans un tableau on calcule et imprime la vente annuelle et les pourcentages mensuels. Une fonction définie dans le programme 3 sera utilisée pour lire le tableau.
![](images/A51030.jpg)
Dans la définition on peut réaliser l'initialisation des tables, en séparant les valeurs des composants par virgules et en définissant au début et à la fin de celles-ci. Par exemple, la définition de la table indiquant le nombre de jours que vous avez chaque mois serait:
int hil-egun [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 31, 31, 31, 30, 30, 31, 31, 31};
S'il n'y a rien, les tables sont initialisées avec des zéros.
Démonstratifs démonstratifs
Comme il a été dit, lorsque vous utilisez le nom d'une table sans index on fait référence à la table complète, mais cela ne signifie pas la valeur de tous les composants, mais la référence de l'endroit où la table est située dans la mémoire. Ce concept est le même que celui de l'exposant et c'est pourquoi on dit que lorsque l'on utilise le nom de la table on spécifie son index. Pour cette même raison, l'allocation ou l'allocation entre les deux tables est également effectuée comme composant. Ne peut pas être effectuée avec une simple allocation.
Cependant, bien qu'il y ait une grande tendance à utiliser des tables, les démonstrateurs peuvent être utilisés avec toutes sortes de données. Les démonstrations sont variables, elles doivent donc être définies et placées en mémoire, occupant une partie de la mémoire. Les démonstrations pascales, bien qu'elles doivent être définies, ne comprennent pas les parties de mémoire, car elles sont dynamiques, mais comme C sont statiques, pour la définition on utilise le caractère spécial *.
Le démonstrateur (pointer en anglais) indique l'adresse de la mémoire d'une donnée et est toujours placé en quatre octets. Dans la définition, vous devez spécifier le type de données affichées, * et le nom de la variable d'index.
![](images/A51030-a.jpg)
Pour une utilisation, * et agents sont utilisés. * Tandis que * a la même fonction que l'opérateur de Pascal (valeur de la variable montrée par le démonstrateur), il est spécifié par rapport aux variables non exposantes pour se référer à sa référence (ou adresse) et non à la valeur (ou contenu).
Le programme 2 définit une fonction d'échange de valeurs entre les deux variables. Les deux paramètres sont des données et des résultats simultanément. Par conséquent, il ne peut être racheté par valeur que par référence (comme dans tout autre langage).
Soyez particulièrement prudent lorsque les exposants participent à des opérations arithmétiques, car l'unité à laquelle il est ajouté ou supprimé est la longueur de la variable affichée au lieu d'être un.
C'est pourquoi dans la partie suivante du programme
![](images/A51030-b.jpg)
La variable p1 (longueur d'un caractère) s'ajoute à p2 deux et p3 quatre (longueur des variables long). D'autre part, les sommes et les rêtes entre exposants sont admises lorsque les types de données affichés sont les mêmes.
Tableaux paramètres de fonctions
Dans le premier programme, nous n'avons pas défini la fonction 'table de lecture'. Comme son premier paramètre est la table, il existe deux options pour la détermination du paramètre : comme tableau ou comme index, comme on peut le voir dans les programmes 3 et 4 (les deux équivalents).
![](images/A51030-c.jpg)
![](images/A51030-d.jpg)
Les différences suivantes doivent être prises en compte:
- Dans la première solution, vous pouvez utiliser des index, de sorte que la variable de travail (i) est complète. Dans le second, cependant, il sera réalisé sans index et la variable de travail (paux) sera démonstrative.
- Comme la fonction standard scanf requiert la donnée de référence, elle est utilisée dans la première solution (la table est du type [i] long), mais dans la seconde non (le pointeur paux et donc la référence est).
- Lors de la seconde solution, paux ++ est ajouté à paux quatre (longueur correspondant à long) et lors de l'évaluation de l'expression p + os-as, le nombre d'OS est ajouté à l'index quatre fois.
- Dans le programme principal, on peut remplacer la table de lecture (salmen, 12) par la table de lecture (salmen [0], 12).
Chaînes de caractères
Une chaîne de caractères ou string est une table avec le caractère spécial ‘\Ø’ formé par des caractères à la fin. Les différences avec les autres tables sont:
- Il peut être démarré avec une constante de type String. Ex. char titre [Ø2] = «VENTES ANNUELLES»;
- Il n’est pas nécessaire de connaître la longueur (en fonctions et macros) car pour détecter la fin il suffit de chercher le caractère ‘\Ø’.
- Dans les fonctions Scanf et Printf, il y a un format spécial pour les chaînes et non pour les autres tables.
- Dans la bibliothèque standard il y a un ensemble de fonctions pour la manipulation string (strlen, strcpy, strcmp, ...)
Les programmes 5 et 6 expliquent la fonction de calculer le nombre de fois qu'un caractère apparaît dans une chaîne.
![](images/A51030-e.jpg)
![](images/A51030-f.jpg)
Autres
- Dans les tableaux multidimensionnels, la définition et l'utilisation exigent un nombre dans la gamme pour chaque dimension.
Par exemple
,int tableau [1Ø] [10]; /* 1Ø ilad1Ø colonne*/
- Vous pouvez définir des tableaux de démonstration. Par exemple, en définissant char * hil-izen [12]. Le tableau des noms de mois contient 12 exposants, dont chacun fait référence à un string.
- Le référencé par un pointeur peut être un autre.
Exemple :
int r, *p, **q;
r = 1Ø
p = r; /* *p = 1Ø */
q = p /* **q = 1Ø */
![](https://elia.eus/static/elhuyar/img/elia_RGB.png)
Gai honi buruzko eduki gehiago
Elhuyarrek garatutako teknologia