Pointeurs et références

Pointeurs

  • Obtenir l'adresse d'une variable : &
  • Déréférencer un pointeur (accéder à l'élément situé à l'adresse pointée) : *
  • Pointeur nul :
    • #include <cstddef> pour accéder à la directive NULL du préprocesseur (déconseillé)
    • utiliser le mot clé nullptr (C++11)
  • Allocation de mémoire avec l'opérateur new
  • Libération de mémoire allouée dynamiquement avec delete

Exemple :

int *ptr { new int };

delete ptr;
  • Un pointeur peut être déclaré constant, c'est à dire que sa valeur ne peut pas changer après initialisation. Attention de ne pas confondre avec un pointeur sur une valeur constante (c'est à dire qu'on ne peut pas changer la valeur après déréférencement).

Exemple :

int n {10};
const int * p { 5 };  // la valeur pointée est constante
*p = 6; // illégal
p = &n; // légal

int * const p2 { &n };  // le pointeur est constant
*p2 = 12; // légal
p2 = p; // illégal

const int * const p3 { &n }; // le pointeur et la valeur pointée sont constants, rien n'est modifiable
  • Pour accéder à un membre d'une structure via un pointeur sur cette structure, il existe deux solutions :
(*pstructure).membre
pstructure->membre

Références

  • Une référence est une variable qui adresse la même zone mémoire qu'une autre. C'est une sorte d'alias.
  • Elle se déclare avec le symbole &
  • Une référence doit obligatoirement être initialisée
  • Une référence ne peut pas être modifiée (c'est l'élément référencé qui est modifié)
  • Les références peuvent servir à passer des variables par adresses à des fonctions (si en plus elles sont const elles évitent des copies inutiles pourles types non fondamentaux)

Exemple :

int n {5};
int &r { n }; // référence sur n

r = 6;
std::cout << n; // affiche 6