Comme l'a dit Koala01 Il ne faut pas confondre :
1) &, représente l'opérateur d'adressage c'est à dire qu'il retourne l'adresse de la variable qu'il a en operande (&i)
2) & sert également à créer un alias. Un alias c'est tout simplement un autre nom pour une variable (en quelque sorte un surnom).
Donc dans l'exemple que tu as donné :
int i = 0;
Ce "statement" défini un objet mémoire initialisé à la valeur 0 et portant le nom de i.
int *pi = &i;
Ce "statement" défini un objet mémoire initialisé avec l'adresse mémoire de l'objet i et porte le nom pi.
L'étoile est l'opérateur de déréférencement mais ici dans ce "statement" il sert à définir un pointeur.
Donc, dans ce "statement" le compilateur va d'abort récupérer l'adresse de l'objet i puis l'a placer dans l'objet pi.
A ce stade le pointeur pi ne contient pas la valeur 0 mais l'adresse de la variable i. Pour pouvoir manipuler la valeur de i via le pointeur pi il faut utiliser l'opérateur de déréférencement (*) de la façon que tu as faite :
*pi = *pi + 1 équivaut à ++i.
Si tu n'utilise pas l'opérateur de déréférencement comme ceci :
pi = pi + 1
alors tu passe à l'adresse suivante donc pi pointe sur n'importe quoi et te causera bien des soucis.
Pour l'alias c'est une toute autre histoire.
Une variable qui est un alias d'un autre objet est un surnom et doit obligatoirement être initialiser au moment ou l'on le déclare.
Attention ce n'est pas vraiment une variable mais un autre nom qui se déclare comme une variable.
int i = 1200;
int &ai = i;
ai = 2000; //Equivaut à i = 2000, on utilise son surnom (ai n'est pas un objet mémoire à part entière mais l'objet mémoire nommé i).
Comme tu peux le voir ce n'est pas la même chose.
Conclusion :
1) un pointeur ne se déclare pas comme un alias et inversement.
2) un pointeur peut pointer sur n'importe quel objet mémoire ce n'est pas le cas pour un alias.
3) un pointeur peut être simplement déclarer sans être initialisé alors qu'un alias ne le peut pas.
Il faut si possible utiliser des alias plutôt que des pointeurs quand cela est possible. Les alias
présentent bien plus de sécurité qu'un pointeur.
Partager