

Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
chapitre les pointeurs pour L1-TI
Typology: Study notes
1 / 2
This page cannot be seen from the preview
Don't miss anything!


I. Problématique Exemple 1 : On dispose d’un tableau T d’entiers déjà repli de n entiers et de taille maximale MAX. On veut insérer un élément e saisi après un entier donné a , si ce dernier existe dans le tableau, à défaut l’entier e sera mis à la fin du tableau. Le tableau T a une taille maximale, à un certain moment on peut arriver à saturation et on ne peut plus insérer : problème des déclarations statiques (fixes). Exemple 2 : On dispose d’un fichier de structure étudiant contenant le numéro d’ordre, le nom et la moyenne de l’étudiant, on veut transférer l’ensemble des moyennes >=10 dans un tableau TM de réels afin d’élaborer des statistiques. On se confronte à un problème : On ne connait pas à l’avance le nombre d’étudiants ayant une moyenne >=10 et par conséquent on ne pourra pas définir la taille de notre tableau à l’avance! Comment remédier à ces problèmes? Dans les deux exemples précédents, la structure de données Tableau ne résout pas le problème, et on aura toujours du gaspillage d’espace ou une saturation, on doit alors penser à une structure de données qui donne exactement l’espace nécessaire : Cette structure de données va être variable selon le besoin de l’exécution courante : On parle alors de structures de données dynamiques. II. Notion de pointeur Jusque-là, et pour représenter les données, nous avons utilisé des variables de types simples (entier, réel, caractère,…) ou composés (tableau ou enregistrement) d’une manière statique, c’est-à-dire l’espace mémoire est réservé au préalable même s’il n’est pas utilisé en totalité (tel est le cas d’un tableau). Chaque variable déclarée est reconnue à travers son identificateur (nom) et aussi son adresse en mémoire. L’accès à une variable pourrait alors se faire à travers son adresse. Le contenu d’une variable peut aussi être une adresse, et dans ce cas cette variable est appelée pointeur.
1. Définition : Un pointeur est une variable spéciale pouvant contenir l’adresse d’une autre variable. Remarque : Le rôle d'un pointeur est de permettre l'accès à une structure qui serait créée avant ou lors de l'exécution. La déclaration doit spécifier le type de base de l'objet qui pourra être accessible à l'aide du pointeur. 2. Représentation et déclaration Il ne s’agit pas de représenter seulement P en tant que variable mais également le lien existant entre P et l’autre variable. Si P est un pointeur qui contient l’adresse d’une variable dont le contenu est l’information a, on peut alors représenter ce fait par le schéma suivant :
P contient l’adresse de la variable contenant l’information a. On représentera alors algorithmiquement de la façon suivante : Type Pointeur = @ Objet Variable P : Pointeur Où Objet est un type simple ou structuré. Exemples : Type Etudiant = Enregistrement Num : Entier Nomp : Chaîne[30] Adr : Chaîne[50] FinEnregistrement Variable Pe : @Etudiant P : @Entier Pe : Désigne la variable qui contient l’adresse Pe@ : Désigne l’objet dont l’adresse est rangée dans Pe P : Désigne la variable qui contient l’adresse P@ : Désigne l’objet dont l’adresse est rangée dans P On considère deux variables P1 et P2 de type pointeur permettant d’accéder respectivement aux informations a et b. Que donnera l’exécution de l’action P1P2? Situation initiale : P1 P P1@ P2@ L’exécution de l’action P1P2 donnera le schéma suivant : P1P2 implique que dans P1 on va placer l’adresse de P2, cela veut dire que P1 va pointer sur l’adresse contenant l’information b, on aura alors : P1 P P1@, P2@ Remarque : Si un pointeur ne correspond à aucune adresse d’objet, on notera : P NIL P1@ P2@: Ceci signifie que la variable adressée par P1 contiendra la valeur contenue dans la variable adressée par P2. Donc la variable adressée par P1 contiendra la valeur b. III. Primitives sur les pointeurs On rappelle que pour une variable statique la réservation de la zone mémoire se fait au moment de la compilation et restera disponible tout au long de l’exécution du programme. Pour les variables de type pointeur, qui ont l’aspect d’être dynamique, la réservation de l’espace mémoire se fait au cours de l’exécution du programme à l’aide de la primitive Allouer. Au cours de cette même exécution, si on juge ne plus avoir besoin de cette variable, on peut s’en passer (la libérer), on utilise alors la primitive Libérer. Schématiquement, et si P est un pointeur, Allouer (P) signifie qu’on va trouver un emplacement mémoire libre suffisant pour contenir un objet pointé par P. a b a (^) b