Вы находитесь на странице: 1из 15

Les Pointeurs

Par : Khaled Belghith 1


Email : khaled.belghith@usherbrooke.ca
Website : http://khaledbelghith.info/p/courses.html

Contenu de cours labor par :


Mme Rim Guedria
I Adressage de variable
1. Adressage direct
2. Adressage indirect
II Les pointeurs
1. Dfinition
2. Les oprateurs de base
III Allocation dynamique de mmoire
1. Dfinition
2. Les oprateurs de base
2
Adressage direct : Accs au contenu dune variable par le
nom de la variable
Exemple :

3
Adressage indirect : Accs au contenu dune variable en
passant par un pointeur qui contient ladresse de la variable
Exemple : A variable contenant 10
P pointeur contenant ladresse de A

4
Dfinition : Un pointeur est une variable spciale qui
peut contenir ladresse dune autre variable.
Si un pointeur P contient ladresse dune variable A,
on dit que 'P pointe sur A'.
Un pointeur est limit un type de donnes. Il peut
contenir :
Ladresse dune variable simple de ce type,
Ladresse dune composante dun tableau de ce type.
5
Les oprateurs de base : Lors du travail avec des
pointeurs, nous avons besoin de :
- Loprateur 'adresse de' : &
&< nom variable> : fournit ladresse de la variable < nom
variable>.
- Loprateur 'contenu de' : *
*< nom pointeur > : dsigne le contenu de ladresse rfrence
par le pointeur <nom pointeur>
- Dclaration dun pointeur :
nom pointeur : Pointeur sur type - Pour recevoir les adresses de
6
variables
Remarque 1:
Les pointeurs et les noms de variables ont le mme rle:
Ils donnent accs un emplacement
dans la mmoire interne de l'ordinateur. Il faut quand
mme bien faire la diffrence:
Un pointeur est une variable qui peut 'pointer' sur diffrentes
adresses.
Le nom d'une variable reste toujours li la mme adresse. 7
Remarque 2:
Par dfaut lorsque lon dclare un pointeur, on ne sait pas
sur quoi il pointe. Comme toute variable, il faut linitialiser.
On peut dire quun pointeur ne pointe sur rien en lui
affectant la valeur NULL. Expl :
i : entier
p1, p2 : pointeur sur entier
p1 &i
p2 NULL
8
Exemple 1 :

9
Exemple 1 :

10
Exemple 2 :
Algorithme XX
VAR
u, v : entier
pu, pv : pointeur sur entiers
DEBUT
u3
crire ( "1- u = ", u , "Adresse de u = ", &u)
pu &u
crire ( "2- *pu = ", *pu , "pu = ", pu)
pv &v
v *pu
crire ( "3- v = ", v , "Adresse de v = ", &v)
crire ( "4- *pv = ", *pv , "pv = ", pv)
FIN
11
Rsultat
Exemple 2 : 1- u = 3 Adresse de u = 2248
Algorithme XX 2- *pu = 3 pu = 2248
VAR 3- v = 3 Adresse de v = 2246
u, v : entier
pu, pv : pointeur sur entiers 4- *pv = 3 pv = 2246
DEBUT
u3
crire ( "1- u = ", u , "Adresse de u = ", &u)
pu &u
crire ( "2- *pu = ", *pu , "pu = ", pu)
pv &v
v *pu
crire ( "3- v = ", v , "Adresse de v = ", &v)
crire ( "4- *pv = ", *pv , "pv = ", pv)
FIN
12
Lallocation statique de mmoire :
Pour rserver lespace mmoire pour un tableau ou une variable
quelconque, on utilise souvent une opration dallocation statique
dans la section variables au dbut,
Inconvnient: lespace rserv doit tre connu lavance (constant)
Exemple
1- A, B : entier
C : rel
2- Type TAB : Tableau [1..50] : dentier
VAR T : TAB 13
A linverse lallocation dynamique permet de rserver un espace
mmoire de taille variable en milieu dexcution dun programme.
On ne peut pas utiliser les noms pour accder cette zone
mmoire, on utilisera par suite les pointeurs.
La fonction ALLOUER permet de rserver un ensemble de cases
mmoires et envoyer ladresse de dbut de cette zone.
PTR ALLOUER (N)
N : nombre doctet rserver.
Une fois on na plus besoin de cette zone mmoire, on peut librer
avec :
LIBERER (PTR) 14
Exemple:
i , N : entier
P : pointeur sur entier
crire ("Donner le nombre de cases rserver :")
Lire(N)
P ALLOUER (N * taille (entier))
Pour i de 1 N
*(P + i) 0
15

Вам также может понравиться