Langage C/Structures
Définition
modifierUne structure dans le langage C est en quelque sorte une définition d'un type de donnée<<types personnalisés>>, on peut donc créer des variables de type radicalement différents. Une structure comporte des sous éléments <<des variables,tableaux ect...>> qui sont du même type ou de types différents contrairement aux tableaux qui vous oblige à utiliser qu'un seul type de donnée pour vos variables.Cela peut s'avérer très utile dans certains cas
Voici un exemple concret sur la façon de définir une structure dans le langage c :
struct coordonees
{
int x;
int y;
int z;
};
Cette structure comme vous pouvez le voir, contient trois sous variables de type "int" ! on peut donc créer nos propres types de donnés avec lesquels nous identifierons nos variable personnalisés. Celle-ci définis des coordonnés spatial (x;y;z), ce type de donnée ou bien cette structure peut s’avérer utile dans un programme qui gère des objets en 3D par exemple.
Comment utiliser des structures?
modifierSupposons que l'on veuille créer un jeu et que l'on veuille stocker tous les meilleurs scores des joueurs. Il nous faudra déclarer trois variables, une stockera le score du joueur, la seconde, l'âge du joueur et la dernière pour le nom du joueur, qui sera donc une chaîne de caractères.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int age=0;//création et intitalisation de la variable age
age=21;
int score=0;//création et intitalisation de la variable score
score=2400;
char nom ="";//création et intitalisation de la chaine de caractère nom
nom="JOUEUR01";
return 0;
}
J'ai maintenant toutes les informations sur le joueur "JOUEUR01" que je peux par exemple stocker dans un fichier que j’appellerais "meilleur score".
Le problème est que cette méthode est trop longue si je veux manuellement entrer toutes les informations de 50 autres joueurs ! Que faire ?!
La solution est d'avoir recours aux structures en créant une structure qui contiendrait les 3 informations du joueur éléments :
#include <stdio.h>
#include <stdlib.h>
int main (){
struct JOUEUR
{
char nom="";
int age;
int score;
};
struct JOUEUR Personne01;//voilà une variable de type JOUEUR créée
///mais comment acceder aux variables maintenant ?
////il faut juste ajouter un point après le nom de la variable de type "JOUEUR" suivi du nom de la sous variable ou sous élément
Personne01.nom="Joueur01"
Personne01.age=21;
Personne01.score=2400;
return 0;
}
Généralement les définitions des structures se fait dans un fichier header ".h", pour ne pas encombrer le fichier "main.c". Et pour éviter de répéter l’identifiant "struct" à chaque fois que l'on déclare une variable de type "JOUEUR par exemple" on ajoute quelques modifications à notre définition de structure comme suit
#include <stdio.h>
#include <stdlib.h>
int main (){
typedef struct JOUEUR JOUEUR; //
struct JOUEUR
{
char nom="";
int age;
int score;
};
JOUEUR Personne01;//voilà une variable de type JOUEUR créée //** vous voyez qu'on n'a plus besoin de l'identifiant "struct"**/
Personne01.nom="Joueur01"
Personne01.age=21;
Personne01.score=2400;
return 0;
}
"typedef" veut dire je veux créer un type de donnée, les deux mots "JOUEUR" c'est eux qui définissent le type le premier permet de préciser quelle est le nom de la structure voulu le deuxième c'est le mot clé qui désignera notre type, ça s'appelle un alias... Donc cette nouvelle méthode de définition permet de créer un alias appelé "JOUEUR" qui remplacera tout le "struct JOUEUR"
Tableaux d'un type personnalisé,un tableaux de structures:
modifierEt c'est là que se concentre tout l’intérêt des structures en C !
Reprenons depuis le début. Notre petit jeu est maintenant célèbre et est joué par trois personnes, et nous voulons enregistrer les scores de toutes les trois personnes comment faire ?
Et bien c'est simple il suffit de créer un tableaux de 3 cases en mémoire de type "JOUEUR" et chaque indice correspondra à un joueur particulier. La taille du tableau sera de "3", les joueurs seront enregistrés de l'indice "0" jusqu'à "2" :
#include <stdio.h>
#include <stdlib.h>
int main () {
typedef struct JOUEUR JOUEUR;///oui de préférence dans un fichier ".h"
struct JOUEUR {
char nom ="";
int age;
int score;
};
////////////////////////////////////
JOUEUR listeDeJoueurs [3];//Création du tableau de type JOUEUR
///////////////entrer les joueurs ///////////
listeDeJoueurs[0].nom="supergamer";/* joueur 1*/
listeDeJoueurs[0].age=14;
listeDeJoueurs[0].score=721;
listeDeJoueurs[1].nom="Joueur01";/* joueur 2*/
listeDeJoueurs[1].age=21;
listeDeJoueurs[1].score=65800;
listeDeJoueurs[2].nom="illiana075";/* joueur 3 */
listeDeJoueurs[2].age=17;
listeDeJoueurs[2].score=7350;
return 0;
}