C++
Cela fonctionne en C++ parce que la signature de la fonction pour get()
est probablement ceci:
void get(char& a); // pass-by-reference
Le symbole &
après char
indique au compilateur que lorsque vous transmettez une valeur char
, il doit transmettre une référence au char
plutôt que de faire une copie de celui-ci. Cela signifie essentiellement que toute modification apportée au sein de get()
sera reflétée dans la valeur a
en dehors de la méthode.
Si la signature de fonction pour get()
était le suivant:
void get(char a); // pass-by-value
alors a
serait passé par valeur, ce qui signifie une copie de a
est faite avant d'être passé dans la méthode en tant que paramètre. Toute modification à a
serait alors seulement la méthode locale, et perdue quand la méthode retourne.
C
La raison pour laquelle cela ne fonctionne pas en C est parce que C n'a que passe par valeur. La seule façon d'émuler passer-par-référence comportement en C est de passer son pointeur par valeur, puis de dé-référencer la valeur du pointeur (accédant ainsi au même emplacement mémoire) lors de la modification de la valeur:
void get(char* a)
{
*a = 'g';
}
int main(int argc, char* argv[])
{
char a = 'f';
get(&a);
printf("%c\n", a);
return 0;
}
L'exécution de ce programme va afficher:
g
C Aucune référence, seulement les valeurs. C++ a des références réelles, des alias vers une autre instance. – GManNickG
Alors, quel est le nom de l'opérateur unaire &? Je pensais que c'était l'opérateur de référencement. –
& en C signifie "adresse de". En C++, & signifie "adresse de" (si utilisé devant une variable) ou "référence à" (si utilisé après le type dans un paramètre). – LeopardSkinPillBoxHat