Les structures
Structure
Voici quelques questions pour vous aider à synthétiser et retenir des contenus qui nous paraissent essentiels dans cette section :
Qu’est-ce qu’une structure ?
Comment fait-on pour définir une structure ?
Quelle est l’utilité d’un typedef ?
Y a-t-il une raison de se passer de l’utilisation d’un typedef pour la définition d’une structure ?
Comment avoir une variable structure ?
Comment accède-t-on aux champs (les éléments) de la structure ?
Comment initialiser une structure à la déclaration ?
Comment copier une structure ?
1. Qu’est-ce qu’une structure ?
La structure en programmation est un type de données qui permet de regrouper en une seule unité plusieurs variables éventuellement de types différents. C’est UNE variable qui est un ensemble de variables. C’est très utile pour composer des objets complexes qui réunissent différentes facettes. Par exemple, si l’on veut faire un carnet de rendez-vous, chaque rendez-vous suppose des informations du genre :
-
un libellé
-
un lieu
-
une date
-
un horaire de début
-
un horaire de fin
-
une catégorie (bureau, perso, loisir, etc.)
-
etc.
Toutes ces informations peuvent être regroupées au sein d’une structure et plusieurs structures permettront d’avoir plusieurs rendez-vous. L’intérêt ensuite est de pouvoir avoir un nombre illimité de rendez-vous.
Autre exemple dans un jeu vidéo en 2D : un ennemi est défini par une position, un déplacement, un type (rampant, grouillant, serpentant, plombant, assommant), un taux d’agressivité, une couleur, une ou plusieurs images, etc. Pour chacune de ces informations, il s’agit premièrement de choisir un type de variable approprié et ensuite de regrouper toutes ces informations au sein d’une structure "ennemi" afin de pouvoir gérer un ou plusieurs ennemis dans le jeu.
Chaque élément de la structure est appelé un "champ". Notre structure rendez-vous a au moins 6 champs et la structure ennemie au moins huit champs (position et déplacement horizontaux et verticaux, type...).
2. Disposer d’une structure dans un programme
a. Définir un type...
Structures et fonctions
Voici quelques questions pour vous aider à synthétiser et retenir des contenus qui nous paraissent essentiels dans cette section :
Une fonction peut-elle retourner une structure ?
Comme récupérer une structure retournée ?
Une fonction peut-elle avoir une structure en paramètre ?
Quelle valeur passer à un paramètre structure ?
1. Retourner une structure
Comme la copie de structure est autorisée, les structures peuvent être prises comme valeur de retour. Soit la structure Coord :
typedef struct coord{
int x, y;
}Coord;
Voici typiquement une fonction qui permet d’initialiser une structure après sa déclaration n’importe où dans le programme :
Coord ConstructPoint1()
{
Coord t0;
t0.x = rand()%1024;
t0.y = rand()%768;
return t0;
}
Dans la fonction :
-
une structure du type souhaité est déclarée,
-
chacun de ses champs est initialisé avec des valeurs aléatoires ou calculées,
-
pour finir, la structure résultante est retournée au contexte d’appel.
Bien sûr, des valeurs peuvent être transmises en paramètres, cela donne par exemple :
Coord ConstructPoint2(int x, int y)
{
Coord t0;
t0.x = x;
t0.y = y;
return t0;
}
Et dans le programme, la structure retournée par la fonction est affectée à une structure du contexte d’appel :
#include <stdio.h>
#include <stdlib.h>
// définir ici structure et fonctions
int main()
{
Coord pt1, pt2;
pt1 = ConstructPoint1();
pt2 = ConstructPoint2(40, 40);
printf("pt1.x=%d, pt1.y=%d\n"
"pt2.x=%d, pt2.y=%d\n",pt1.x,pt1.y,pt2.x, pt2.y);
return 0;
}
L’appel...