Le symbole & (esperluette)

1. Dans les déclarations de paramètres ou variables

Quand & est placé après un type dans une déclaration, il crée une référence :

void swap3(int &a, int &b) { ... }

Une référence est comme un "alias" ou un "surnom" pour une variable existante. Elle permet d'accéder et de modifier directement la variable originale sans créer de copie.

Exemple simple :

int original = 5;
int &reference = original;  // reference est un alias pour original
reference = 10;             // modifie original à travers la référence
// Maintenant original vaut 10

2. Devant une variable (opérateur d'adresse)

Quand & est placé devant une variable, il renvoie l'adresse mémoire de cette variable :

swap2(&a, &b);  // Passe l'adresse de a et l'adresse de b

Le symbole * (astérisque)

1. Dans les déclarations (déclaration de pointeur)

Quand * est placé après un type dans une déclaration, il crée un pointeur :

void swap2(int *a, int *b) { ... }

Un pointeur est une variable qui contient l'adresse mémoire d'une autre variable.

2. Devant une variable (opérateur de déréférencement)

Quand * est placé devant un pointeur, il permet d'accéder à la valeur stockée à l'adresse contenue dans ce pointeur :

int c = *a;  // c prend la valeur stockée à l'adresse contenue dans a
*a = *b;     // la valeur à l'adresse contenue dans a devient celle à l'adresse contenue dans b

Comparaison des trois approches de swap

  1. swap1(int a, int b) : Utilise des copies des valeurs (passage par valeur)