Académique Documents
Professionnel Documents
Culture Documents
Algorithmique Et Structures de Données II: Le Pointeur
Algorithmique Et Structures de Données II: Le Pointeur
Algorithmique et structures de
données II
(Cours 3)
Le Pointeur
0x3fffd10
0x3fffd11
0x3fffd12
0x3fffd13
0x3fffd14
2
....
1
1. Introduction: notion d’adresse
0x3fffd10
Exemple
0x3fffd11
toto: entier
0x3fffd12 toto
toto ← 18 18
0x3fffd13
0x3fffd14
...
3
2. Définition
Pour accéder à une valeur d’une variable, il suffit d’utiliser
son nom.
Pour accéder à l’adresse d’une variable, on utilise un pointeur
4 4
2
3. Les variables pointeurs:
3.1 Déclaration
En algorithmique:
nom: ^ type pointé // pointeur sur type pointé
Exemple:
Variables p: ^ entier //pointeur sur entier
toto: entier
3
3. Les variables pointeurs:
3.2.1 Initialisation par NIL
Attention à toujours initialiser un pointeur. Un pointeur qui n’est pas
initialisé s’appelle pointeur pendant. C’est un pointeur qui pointe
n’importe où. Si on déréférence ce pointeur et on lui affecte une
nouvelle valeur, on va écraser un emplacement mémoire quelconque
et on risque de faire planter le programme.
p: ^ entier
p← NIL //p pointe nul part
7 7
4
3. Les variables pointeurs:
B.REMARQUE
Le pointeur pointe sur la variable dont il contient l’adresse
5
3. Les variables pointeurs:
Avant de déréférencer un pointeur (extraire sa valeur), il faut
s’assurer qu’il n’est pas nul.
C. EXEMPLE RÉCAPITULATIF
Variable
x, n: entier
p: ^ entier
Début
n ← 20 n 20 x ? p ?
p←&n n 20 x ? p
x ← p^ n 20 x 20 p
P^ ← 30 n 30 x 20 p
p ← &x n 30 x 20 p 11
4. Allocation dynamique
4.1 Mémoire dynamique
6
4. Allocation dynamique
Mémoire statique: zone de la mémoire où sont stockés les données
qui ont la même durée de vie que le programme (variables globales)
13
4. Allocation dynamique
La déclaration permet d’allouer un emplacement dans une partie
de la mémoire appelée PILE. Les variables déclarées dans la
PILE possèdent un nom. Leur portée (càd là où elles peuvent
être utilisées) est déterminée par l’endroit où elles sont
déclarées. Elles sont crées dès l’entrée dans la portée et
détruites dès la sortie de leur portée.
7
4. Allocation dynamique
4.2 Accès à la mémoire dynamique
Pour créer une variable dans le tas, on utilise l’opérateur
ALLOUER suivi du type de la variable qu’on veut créer.
En algorithmique:
variables • px est une variable de type pointeur
• allouer réserve de la mémoire dans
px: ^ entier le tas
Début • px contient alors l’adresse de la
allouer px mémoire allouée (NIL si plus de
… mémoire disponible)
15
4. Allocation dynamique
Attention:
Allouer réserve de la mémoire mais ne l’initialise pas!
Début
px^ ← 123 //On affecte alors 123 à la variable du TAS.
4.3 Libération de la mémoire dynamique
Si on ne libère pas la mémoire, elle peut être saturée et le
programme peut se planter.
8
4. Allocation dynamique
On utilise donc, l’opérateur libérer.
libérer px
17
4. Allocation dynamique
4.5 Arithmétique de pointeurs
Les seules opérations arithmétiques valides sur les pointeurs (de type
entier par exemple) sont :
• l’addition d’un entier à un pointeur. Le résultat est un pointeur de
même type que le pointeur de départ.
• la soustraction d’un entier à un pointeur. Le résultat est un pointeur
de même type que le pointeur de départ.
• la différence de deux pointeurs pointant sur des objets de même
type. Le résultat est entier.
9
4. Allocation dynamique
EXEMPLE:
10
5. Pointeur vers un enregistrement
Nous pouvons utiliser un pointeur pour mémoriser l’adresse
d’un enregistrement.
variable
pointpers: ^ personne
22
11
6. Pointeurs et tableaux
6.1 Tableaux numériques
Tout tableau, en algorithmique (et en C), est en fait un pointeur
constant. Exemple: T: tableau [0..9] d’entier
T est un pointeur constant dont la valeur est l’adresse du
premier élément du tableau
6. Pointeurs et tableaux
24
12
6. Pointeurs et tableaux
Exemple: calculer la taille d une chaine de caractère
Algorithme taille_chaine
Var
ch : ^ caractère
i: entier
Début
ch^ ← ‘’ chaîne de caractères’’
i←1
tant que (ch^ <> ‘\0’) faire
ch ← ch+1
i ← i+1
FinTQ
Écrire (‘’ taille de la chaine est’’, i) 25
fin
13