différence entre * et & - C++ - Programmation
Marsh Posté le 25-03-2008 à 13:18:45
dans le 1er code, tu transmet la valeur effective de unx, dans l'autre tu transmets son adresse (pointeur)
Marsh Posté le 25-03-2008 à 14:02:25
ah. Je croyais que celui où on transmet l'adresse, c'etait avec *.
Ca apporte quoi de faire de la façon du 1er code?
Passer l'adresse (donc avec & ) je sais que ça fait gagner de l'espace mémoire, mais l'autre je sais pas...
Marsh Posté le 25-03-2008 à 14:14:52
Code :
|
passage par valeur, dans A tu as une copie de unx. Bon ca va c'est pas trop gros les int, mais sur un gros truc, la copie peut être lourde.
Code :
|
idem (passage par valeur), mais ici unx est un int* (pointeur sur int). Dans A tu as donc une copie de ce int* (ce qui devrait te permettre d'accéder à l'int qui est derrière et qui n'a pas été copié).
Si tu avais un truc plus gros qu'un int, copier un pointeur sur un gros truc c'est moins lourd que de copier le gros truc.
Code :
|
dans A tu auras accès à unx car là tu as passé une référence (une adresse), et pas une copie (pas une copie d'int, pas une copie d'int*).
A priori ca sera aussi "léger" que A(int* unx) mais pas besoin d'écrire qqchose de spécifique quand tu appelles A(x) (tu écris le même appel qu'avec A(int unx))
Marsh Posté le 25-03-2008 à 14:25:52
Ok, merci
Mais au final, pour moi le & et * ça revient à la même chose alors... Si c'est juste que c'est un gain de mémoire dans les 2 cas. non ?
Marsh Posté le 25-03-2008 à 14:27:46
non. La sémantique de la référence est différente de celle du pointeur.
Principalement, il n'existe pas de références ne référençant rien ( comme l pointeur NULL). Ensuite, les références constantes et références non-constantes ont des effets de bords non négligeable.
En c++, on est grand, on passe des références
Les pointeurs, suaf besoin bas niveau, sont à proscrire car non sécure.
Marsh Posté le 25-03-2008 à 14:29:21
Mince, dans mon projet de prog je suis parti pour tout passer par pointeur...
Marsh Posté le 25-03-2008 à 14:34:51
nebneblan a écrit : Ok, merci |
Quand tu utilises le passage par référence, tu as directement dans A() le "vrai" objet, pas un pointeur ou une copie. Normalement on dit :
Citation : Utilisez les références quand vous pouvez, et les pointeurs quand vous devez. |
Sur tes interfaces, tes méthodes public, utilise des références, histoire que les gens s'emmerdent pas à créer des pointeurs juste pour faire plaisir à tes méthodes.
Dans ta tambouille interne, si tu as besoin d'un pointeur, ben utilise le. L'un des trucs qui pourrait servir dans certains cas particuliers, c'est qu'on peut affecter NULL (zéro) au pointeur, mais bon
edit : grilled
Marsh Posté le 25-03-2008 à 12:31:09
Salut je voudrais juste faire le point sur ça:
C'est quoi la différence entre les deux?
merci