Académique Documents
Professionnel Documents
Culture Documents
2 Pointeurs
2 Pointeurs
Semestre 1
Chapitre 1: Introduction à l'Informatique
Chapitre 2: Le Langage Algorithmique
Chapitre 3: Les Tableaux
Chapitre 4: Les Actions Paramétrées
Semestre 2
Chapitre 5: Les Enregistrements
Chapitre 6: Les Pointeurs
Chapitre 7: Les Listes Chaînées
Chapitre 8:
1
Les Pointeurs
@300 @302
lorsqu’on exécute un programme, la
machine accède à la (MC) en utilisant prix
les adresses et non pas les noms des
variables: @304
Lorsqu’on écrit : n n+1; nom
La machine utilise :
Contenu(@300) Contenu(@300) +1;
@308
@300
Var @304
n : entier; (* @n désigne l’adresse de n : @300 *)
prix : réel; (* @prix désigne l’adresse de prix: @304*)
8
Var
n : entier; (* @n désigne l’adresse de n : @300 *)
prix : réel; (* @prix désigne l’adresse de prix: @304 *)
Note: (MC)
On peut utiliser cette affectation : n
p1 @n;
p2 @prix; @300
prix
Dans p1 on sauvegarde l’adresse de n et
dans p2 on sauvegarde l’adresse de prix
@304
p1 et p2 sont donc des variables et p1 @300
elles seront déclarées dans la partie @350
< VARIABLE> p2 @304
@380
Donc ces variables ont des adresses
9
Question : Quel est le type de p1 et p2 ?
--- les pointeurs ---
Définition : un pointeur est une variable qui contient l’adresse
d’un objet de type simple ou composé.
Déclaration :
<Idf_Pointeur> : ^ <TypeVar>;
10
Déclaration :
<Idf_Pointeur> : ^ <TypeVar>;
(MC)
Exemple: pe1 pe2
Type
complexe : Enregistrement @300 @310
re: entier; p pcx
im: entier;
Feng;
@318 @322
Var
x y
pe1, pe2 : ^entier;
p : ^caractère;
@400 @402
pcx:^complexe;
c d
x, y : entier;
c: caractère;
@404 @405
d :complexe; 11
Var (MC)
pe1, pe2 : ^entier; pe1 pe2
p : ^caractère; @400
pcx:^complexe; @300 @310
x, y : entier; p pcx
c: caractère; @404 @405
d :complexe; @318 @322
x y
Début
pe1 @x; @400 @402
c d
p @c;
pcx @d; @404 @405
Fin;
12
(MC)
Remarque: pe1 pe2
Du moment que le pointeur contient @400
l’adresse de la variable ⇒ accéder au @300 @310
contenu de cette variable. p pcx
On utilise la syntaxe suivante: @404 @405
Idf_Pointeur^ @318 @322
x y
Lire (x); ≡ lire (pe1^);
Ecrire (x); ≡ Ecrire (pe1^);
@400 @402
c d
Lire (c); ≡ lire(p^);
Ecrire (c); ≡ Ecrire (p^);
@404 @405
@300 @500
p1 @x;
14
Opérations sur les pointeurs :
@200
p @t;
p p+1;
Remarque:
Le contenu du pointeur s’incrémente on ajoutant la taille du
type sur lequel il pointe.
Exemple :
En utilisant l’affectation pp+1 pour le type:
caractère : le contenu de p augmente de 1
entier : le contenu de p augmente de 2 (par exemple)
date de naissance : le contenu de p augmente de de 6 16
Question : qu’est ce qu’on a gagné avec ces pointeurs ?
p : ^caractère; @318
@310 @311 @312 @313
Allouer(p);
@314 @315 @316 @317
Libérer(p);
@318 @319 @320 @321
Remarque :
Après qu’on a libéré p, le contenu de p est toujours à : @318.
Il est recommandé de mettre à jour le pointeur à une adresse
spéciale juste après l’utilisation de : libérer (p).
L’adresse spéciale Nil joue ce rôle : le pointeur ne contient l’adresse
d’aucun élément: p Nil; 19
Exemple : Partie de la MC
p
p : ^caractère; @318
@310 @311 @312 @313
Allouer(p);
@314 @315 @316 @317
Libérer(p);
@318 @319 @320 @321
@380 @313
Allouer(P);
Allouer(R);
@400 @318
P R;
21
Attention :
R P
@380 @313
Allouer(P);
Allouer(R);
@400 @318
P nil;
22
Attention :
P
P : ^entier; @380
x : entier; @313
x
P @x;
@380
Libérer (x);
23
Exercice :
On veut écrire un algorithme qui sauvegarde dans un tableau
N chaînes, puis les afficher en utilisant les deux concepts :
allocation statique et dynamique.
24
Algoritme Allocation statique
Var tab 1 2 ………………………………………………….30
tab: tableau[30][20] de caractère; A l g o
1
ch : chaîne[20];
2 a k r a m
i, N: entier; .
. a i t a m r a n e
Début .
Répéter lire (N); jusqu’à (N≤ 0 ou N > 30); ..
Pour (i 1 à N) .
.
Faire .
.
écrire (‘’ donner la ‘’, i, ‘’ième chaîne’’); .
Lire(ch); 30
tab[i] ch;
Fait;
Pour (i 1 à N)
Faire
ch tab[i];
écrire (‘’ la ‘’, i, ‘’ième chaîne est : ’’ ch);
Fait;
Fin; 25
Algoritme Allocation dynamique
Type
Pchaine: Enregistrement tab
c: chaine[20]; 1 A l g o
Feng; 2
a k r am
Var .
.
tab: tableau[30] de ^Pchaine; . a i t amr a n e
.
b : booléen; .
i, j : entier; .
.
Début .
.
Répéter lire (N); jusqu’à (N≤ 0 ou N > 30); .
.
i 1; b vrai; 30
………. 30
………
Fin;
27
Fin
28