Je sais que ce topic n'est pas nouveau. Mais quelle est la différence entre un pointeur et une référence?
Merci
Je sais que ce topic n'est pas nouveau. Mais quelle est la différence entre un pointeur et une référence?
Merci
Les pointeurs existent en C. Les references n'existent pas en C. C'est une difference...
Quelle est la définition d'une référence ? Est-ce que &var n'est pas une référence sur var ?Envoyé par DaZumba
Pas vraiment. A strictement parler, &var est l'adresse de var (& est l'operateur adresse). Si on veut appeler ca 'reference', soit, mais il faut le preciser parce que ce n'est l'usage etabli.Envoyé par Eusebius
Je pense que le PO voulait parler du passage par reference a une fonction (i.e. eviter la copie de la variable passee en argument) qui existe en Fortran ou en C++, notamment. Mais le C ne connait que le passage par valeur.
Je crois qu'une referrence en C++ pointe forcement sur quelquechose (donc pas sur NULL) et qu'on peut pas faire d'arithmetique dessus (pas d'addition, d'incrementation...)
On va finir par repondre a la question... En C++, un passage par reference signifie que l'on passe la variable a la fonction. Pas un pointeur contenant l'adresse de la variable, pas l'adresse de la variable. La variable. (Apres, c'est a l'implementation de determiner comment emuler ce comportement... Cela peut impliquer l'usage de pointeurs.)
Oué ben fallait pas appeler ça un "opérateur de déréférencement" parce que c'est légèrement trompeur...Envoyé par DaZumba
L'operateur de dereferencement, c'est * (comme dans *p = 5; ). Mais tu as raison. Puisqu'on parle de derefencement, autant parler de referencement pour &...Envoyé par Eusebius
Il faudrait savoir de quoi le PO parle...
Oué, j'avais pris un raccourci.Envoyé par DaZumba
Je pense que ce sujet sera plus à son aise dans le forum C++ où les deux notions existent.
Mais une petite recherche peut déjà t'en apprendre beaucoup :
Différence entre Pointeurs et References
réferences et pointeurs
Pour les références:
http://jlecomte.ifrance.com/c++/c++-...rences-fr.html
J'ai lu tout ce que vous m'avez donné.
Super merci!
Les références permettent donc d'éviter les histoires de pointeurs nuls, en faisant directement référence (c'est le cas de le dire ) à l'objet lui même. Une référence ne peut donc être nulle!
Cependant, certains d'entre vous on parlé de tests supplémentaires à effectuer quand même, pour éviter une "segmentation fault".
Comment peut-il y avoir ce genre d'erreur?
Si on passe par exemple une référence pour le retour d'une fonction sur un objet créé dans la fonction, ça risque très fortement de planter magistralement.
Problème, il est impossible de savoir si une référence est invalide. Donc il faut avoir un design de programme propre
ok merci Miles.
Un truc qui me chiffonne quand même:
quand tu passes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MaFonction(type objet)Quelle est la différence?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MaFonction(type &objet)
La première passe l'adresse de l'objet et la deuxième sa référence.
Y a t-il une copie quand on passe l'adresse?
Merci!
Dans le premier cas, le constructeur par copie est appelé, dans le second cas non.
D'accord...
L'ajout de const permet le passage "protégé" par référence. Pour modifier l'objet , il faut alors appeler le constructeur de copie, puis retourner l'objet en fin de fonction...
N'est-ce pas plus simple d'utiliser l'adresse (qui fait déjà la copie) et non pas la référence?
Non, ce n'est pas plus simple, là on peut écrire comme si c'était le même objet. Dans l'autre cas, on doit faire un pointeur, déréferencer lors de l'appel, ...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager