Vous êtes sur la page 1sur 9

27/02/2023

Chapitre 1:
Les pointeurs

Mme BEN SALEM Asma

Définition
 Un pointeur est une variable qui contient une adresse d’une autre variable.

 La variable pointée par un pointeur est dite variable référencée ou bien pointée.

 Schématiquement, il est représenté par un cercle pour le distinguer des variables


contenant des données

pointeur variable

2
27/02/2023

Remarques
 Un pointeur est associé à un type de variable sur lequel il peut pointer. Par exemple,
un pointeur sur entier ne peut pointer que sur des variables entières.

 Un pointeur est lui-même une variable et à ce titre il possède une adresse.

 Il convient de ne pas confondre l'adresse de la variable pointeur et l'adresse contenue


dans le pointeur (adresse de la variable pointée).

Déclaration
Par convention, les pointeurs commencent par la lettre p. Il faut déclarer le type de la
variable pointée.
Syntaxe:
nom_ptr : Type_de_base ou nom_ptr : ^Type_de_base

nom_ptr : Nom de la variable pointeur Type_de_base : Type de la variable pointée


Exemples:
P1 : entier
P2 : Réel
P3 : date

4
27/02/2023

Utilisation d’un pointeur

 On utilise un pointeur pour mémoriser l'emplacement d'une autre variable.

 Il est très rare d'affecter directement une adresse à un pointeur.

 On affecte en général l'adresse d'une variable existante.

 On utilise l'expression "adresse de" ou l'opérateur d'adresse &.


 l’accès à une variable élémentaire se fait selon cette syntaxe : * nom_ptr

 l’accès à un enregistrement pointé se fait selon cette syntaxe : nom_ptr

Application 1
Soit v une variable de type réel et p un pointeur sur réel.
Quelle instruction écrire pour que p pointe sur v?

6
27/02/2023

Application 2
Soit l’algorithme suivant:

Algorithme Exemple
Var
n : entier
p : entier
début
n  35
p  adresse de n
écrire(*p )
*p  30
fin
Donner le résultat d’exécution de cet algorithme.

Initialisation d’un pointeur


 Il faut toujours initialiser un pointeur.

 Un pointeur qui n'est pas initialisé ne pointe pas nulle part mais n'importe où.

 Si on veut que le pointeur ne pointe nulle part, il faut l'initialiser à NIL (Not Identified
Link) ou NULL (en C/C++).

Exemple :

p : entier

p  NIL //p pointe nulle part

8
27/02/2023

Application 3
Compléter le tableau suivant.

Instructions N X P
N20
P  adresse de N
X  *P
*P  30
P  adresse de X

Pointeur sur un enregistrement


Il est très courant d'utiliser un pointeur pour mémoriser l'adresse d'un enregistrement.
Avec un pointeur sur un enregistrement, on peut accéder aux champs de
l'enregistrement pointé en utilisant l'opérateur "->"

Exemple :
p: Date
p-> jour  20
écrire (p-> mois)

10
27/02/2023

Exemple
Type etudiant = enregistrement
Id :entier
Cin :entier
Nom : chaine[1..10]
Groupe : chaine[1..6] }
finEnreg
Var Etud :etudiant
Petud : !etudiant
Début
Etud.cin 00348799
Etud.nom ‘’Mohamed’’
Petud adresse de etud
Ecrire(petud->nom)
Ecrire(petud->cin)
Fin

11

Exercice
Écrire une procédure qui permet de permuter 2 étudiants en utilisant 2 pointeurs sur
étudiants.

12
27/02/2023

Exercice
Écrire une procédure qui permet de permuter 2 étudiants en utilisant 2 pointeurs sur
étudiants.
PROCEDURE PermutEtudiant (p1 : ↑etudiant, p2 : ↑ etudiant)
VAR
Aux: etudiant
DEBUT
Aux  P1 ↑
p1 ↑ P2 ↑
P2 ↑ Aux
FIN

13

Allocation dynamique de la mémoire


La déclaration d’un pointeur ne suffit pas pour réserver l’espace mémoire nécessaire.
La réservation se fait d’une façon explicite via une fonction nommée Allouer.
La libération de la mémoire se fait aussi via une procédure spécifique nommée Libérer.
 ALLOUER : est une fonction qui permet l’allocation dynamique d’un espace
mémoire libre pour un objet de type précis. Elle permet aussi d’attribuer l’adresse de
l’espace allouée comme contenu du pointeur.

 LIBERER : est une procédure qui permet la libération de l’espace mémoire pointé
par le pointeur donné en paramètre

14
27/02/2023

Exercice
Ecrire un algorithme de permutation de 2 entiers faisant appel à une procédure PERMUT.

PROCEDURE PERMUT (A, B: ↑entier)

VAR

C: entier

DEBUT

C<― *A

*A <―*B

*B<―C

FIN

15

Version1 Version2
ALGORITHME PERMUTATION ALGORITHME PERMUTATION
VAR VAR
X : entier X : ↑entier
Y : entier Y : ↑ entier
DEBUT DEBUT
ECRIRE (« Donner 2 entiers ») x← ALLOUER ()
LIRE (X, Y) Y←ALLOUER ()
PERMUT (↑X, ↑ Y) ECRIRE (« Donner 2 entiers »)
LIRE (*X, *Y)
PERMUT(X, Y)
FIN PERMUTATION FIN PERMUTATION

16
27/02/2023

Avantages de l’allocation dynamique


L’allocation dynamique se fait au cours de l’exécution, elle permet de gagner l’espace
mémoire puisque La durée de vie de ces objets dépend de l’utilisation de ces objets.

Par contre, une réservation statique permet d’occuper l’espace mémoire durant la durée de
vie de programme et le taux d’occupation n’est pas toujours de 100% ce qui implique une
perte de l’espace mémoire.

17

Vous aimerez peut-être aussi