Académique Documents
Professionnel Documents
Culture Documents
de la mémoire
Présenté par : Olyvier NZIGHOU
Ecole Polytechnique de Libreville
Utilisation des pointeurs
1. Passage de paramètres par adresse
En algorithmique :
var x : réel, pour signifier le passage par adresse.
Procédure Rectangle(long : réel, larg : réel, var périmètre : réel )
En langage C++ :
void Rectangle(float long, float larg, float * prerimetre)
Appel de la procédure : Rectangle(x , y , &z)
2. Allocation dynamique
1. Créer
2. Manipuler
3. Supprimer les variables dynamique
A. Notion de mémoire
La mémoire centrale est divisée en plusieurs cases numérotées à
partir de 0,1,2, etc.
Chaque case mémoire à une taille de 1 octet soit 8 bits
Il y a des cases vides et des cases ayant déjà un certain contenu.
x10
x étant une variable de type entier, elle doit occuper 4 octets, dans
un espace contigüe de la mémoire.
Variable
T : tableau[5] entier va occuper 5x4 = 20 octets dans la mémoire.
Exemple :
Variable
x : entier
P : pointeur entier (P va contenir l’adresse d’un entier)
Déclaration
<NomPointeur> : pointeur <TypeVariable>
<NomPointeur> : ^<TypeVariable>
En langage C++
<TypeVariable> : * <Nompointeur>
D. Notion de pointeur
Exemple 1 :
P
P : pointeur entier
100
x : entier
Début x
x 10 10
PAdr(x) 100
x = P^
P^5
5
100
D. Notion de pointeur
Qu’est ce qu’on a pu faire avec le pointeur P ?
Exemple :
x12
Lire(x)
P^
100
D. Notion de pointeur
//2. manipulation de la variable dynamique
P
P^5 100
P^
5
100
Allouer(P)
//2. Création de la variable dynamique
Pour i 1 à 100 faire P
200
P^[i] i P^
1 2 2 … 99 100
Fin pour 200 1 2 3 … 100
D. Notion de pointeur
//3. Suppression de la variable dynamique
P
200
Libérer(P) P^
? 1 2 2 … 99 100
200 1 2 3 … 100
Variable
P : pDate
D. Notion de pointeur
Début
//1. Création de la variable dynamique
P
Allouer(P) 150
P^
j m a
150
P
150
?
P^
j m a
24 2 2021
150
E. Les listes
T 1 7 2 0
1 2 3 … N
1 7 2 0
Le modèle
Variable
L, p, q : pListe
L Val Suiv
E. Les listes chaînées
Le modèle de la liste
Ensemble des procédures et des fonctions permettant de manipuler la
liste :
Primitive En algorithmique En langage C++
Init Init(P) P = nullptr
Allouer Allouer(P) P = new <Type>
Libérer Libérer(P) delete P
Ecrire(Val(P)) cout<<(*P).Val ou PVal
Val Si Val(P) > 0 … if(PVal > 0)
Nom(P) Moy(P)
Age(P)
Exercice d’application
S, Q, P : pListe
Allouer(S)
Aff_val(S,2)
QS …ligne 1
Allouer(P)
Aff_val(P,val(Q)-1)
Aff_suiv(S,P) … ligne 2
E. Les listes chaînées
Q suiv(S) …ligne 3
Aff_suiv(P,S) … ligne 4
Aff_suiv(S,Nil) … ligne 5
Aff_suiv(P,suiv(S)) … ligne 6
Q suiv(P) …ligne 7
Merci de votre attention
Questions ?