Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1574 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  différence entre * et &

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

différence entre * et &

n°1707247
nebneblan
Posté le 25-03-2008 à 12:31:09  profilanswer
 

Salut je voudrais juste faire le point sur ça:
C'est quoi la différence entre les deux?
 

Code :
  1. class A
  2. {
  3. int x
  4. public:
  5. A(int * unx)
  6. };


 
 

Code :
  1. class A
  2. {
  3. int x
  4. public:
  5. A(int & unx)
  6. };


 
 
merci

mood
Publicité
Posté le 25-03-2008 à 12:31:09  profilanswer
 

n°1707269
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 25-03-2008 à 13:18:45  profilanswer
 

dans le 1er code, tu transmet la valeur effective de unx, dans l'autre tu transmets son adresse (pointeur)

n°1707300
nebneblan
Posté le 25-03-2008 à 14:02:25  profilanswer
 

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...


Message édité par nebneblan le 25-03-2008 à 14:06:26
n°1707323
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 25-03-2008 à 14:14:52  profilanswer
 

Code :
  1. A(int unx)


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 :
  1. A(int* unx)


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 :
  1. A(int & unx)


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))
 
 :o


Message édité par Xavier_OM le 25-03-2008 à 14:20:33

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°1707347
nebneblan
Posté le 25-03-2008 à 14:25:52  profilanswer
 

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 ?

n°1707351
Joel F
Real men use unique_ptr
Posté le 25-03-2008 à 14:27:46  profilanswer
 

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 :o
Les pointeurs, suaf besoin bas niveau, sont à proscrire car non sécure.

n°1707354
nebneblan
Posté le 25-03-2008 à 14:29:21  profilanswer
 

Mince, dans mon projet de prog je suis parti pour tout passer par pointeur...

n°1707362
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 25-03-2008 à 14:34:51  profilanswer
 

nebneblan a écrit :

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 ?

 

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 :o

 


edit : grilled


Message édité par Xavier_OM le 25-03-2008 à 14:35:30

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  différence entre * et &

 

Sujets relatifs
Différence entre FF et IE : ListeDifférence données entre affichage et table
[XML] Différence entre balisesDifférence texte IE et FIrefox
Différence entre deux datesQu'elle différence entre --> & //--> ?
firefox - IE - Différence de page !!!balise IMG dimensions fausses, difference entre HTML & DOM, sous IE
Quel difference entre if () { } et if(): endif; quel interet ?[PHP] Différence entre les valeurs de deux tableaux
Plus de sujets relatifs à : différence entre * et &


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR