CM2-Allocation dynamique de mémoire.pdf
Document Details
Uploaded by Deleted User
Tags
Full Transcript
LIFAPSD – Algorithmique, Programmation et Structures de données Nicolas Pronost Chapitre 2 Allocation dynamique de mémoire 2 Notion de pointeur Un pointeur est une variable destinée à contenir une adresse mémoire Sur une machine 32 bits, les adresses m...
LIFAPSD – Algorithmique, Programmation et Structures de données Nicolas Pronost Chapitre 2 Allocation dynamique de mémoire 2 Notion de pointeur Un pointeur est une variable destinée à contenir une adresse mémoire Sur une machine 32 bits, les adresses mémoire sont codées sur 4 octets donc 232 ≈ 4 milliards (109 ) d’adresses possibles Sur une machine 64 bits, les adresses mémoire sont codées sur 8 octets donc 264 ≈ 18 × 1018 d’adresses possibles Déclaration d’une variable pointeur en algorithmique p : pointeur sur type Déclaration d’une variable pointeur en C++ type * p; Deux lectures possibles équivalentes *p (valeur pointée) est de type type p est de type type* (pointeur sur type) 3 Pointeur et référence Variable normale en C++ int a; Référence à une variable int a = 2; int & b = a; // référence b = 3; // a vaut maintenant aussi 3 a = 4; // b vaut maintenant aussi 4 Pointeur sur une variable int a = 2; int * b = & a; // pointeur // b contient l’adresse de a (ex. 3 984 562 410) 4 Opérateurs sur pointeur L’opérateur & sur une variable permet de récupérer son adresse mémoire L’opérateur * (↑ en algorithmique) permet d’accéder à la valeur qui se trouve à l’adresse pointée précondition: adresse valide le type de pointeur permet de savoir combien d’octets lire et comment les interpréter Exemple Variables x : entier PILE ptrX : pointeur sur entier Début x 55 53 3 021 524 008 x ← 53 int x = 53; ptrX ← &x int * ptrX = &x; ptrX↑ ← ptrX↑ + 2 *ptrX = *ptrX + 2; ptrX 3 021 524 008 3 021 524 000 afficher(x) cout