Références

En C pour faire un swap, on écrit

    void swap(int* p, int* q) {
        int tmp = *p;
        *p = *q;
        *q = tmp;
    }

    int x, y;
    swap(&x, &y)

Soucis avec les pointeurs

Le soucis des pointeurs c'est :

  • c'est moche *p + *q au lieu du naturel x + y ;
  • on peut modifier à la fois p et *p donc trop de bugs ;
  • on peut avoir un pointeur null ou qui pointe vers n'importe quoi
  • C'est mieux de directement manipuler des objets Point p et non pas Point* p car ça appelle le destructeur quand la mémoire est libérée

Pour cela, il propose les références.

Définition d'une référence

Une référence est un nouveau nom pour désigner un objet existant.

void swap(int& i, int& j)
{
    int tmp = i;
    i = j;
    j = tmp;
}

int x, y;
swap(x, y);

L'implémentation derrière la scène est la même que les pointeurs. Mais c'est une vision technique. On peut vraiment voir ça comme un nouveau nom.

Exercice

int x = 4;
int& y = x;
y = 5;

Que vaut x à la fin ?

Il vaut 5. Car en vrai, c'est la même chose que :

int x = 4;
int py = &x;
*py = 5;

Voir aussi

[https://isocpp.org/wiki/faq/references]