Chapitre les Pointeurs, Study notes of Algorithms and Programming

chapitre les pointeurs pour L1-TI

Typology: Study notes

2025/2026

Uploaded on 02/27/2026

tesnim-elloumi
tesnim-elloumi 🇹🇳

12 documents

1 / 2

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
1
Les pointeurs
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-, et pour représenter les données, nous avons utilisé des variables de types simples (entier, 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 :
pf2

Partial preview of the text

Download Chapitre les Pointeurs and more Study notes Algorithms and Programming in PDF only on Docsity!

Les pointeurs

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 P1P2? Situation initiale : P1 P P1@ P2@ L’exécution de l’action P1P2 donnera le schéma suivant : P1P2 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