C++

Résolu/Fermé
kaoutar88 Messages postés 32 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 11 octobre 2009 - 30 sept. 2009 à 21:08
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 1 oct. 2009 à 17:48
Bonjour,
quelle est la différence entre le passage par adresse et le passage par référence en C++ ??

7 réponses

watou Messages postés 199 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 19 avril 2013 28
30 sept. 2009 à 21:31
passage par adresse:
on transmet un pointeur vers l'objet à la fonction !!
ex:
void mafonction(int * monpointeur) // ici c'est un pointeur vers un int !
{
  // pour acceder a la variable pointée :
  *monpointeur = 8;
  *monpointeur++;   
}

passage par référence :
une réference est un synonyme d'un objet !
autrement dit on transmet l'objet lui même !!!!!! ^o)
ex:
void mafonction2(<code>int & mareference
)
{
mareferance = 8;
mareference++;
}
</code>

les deux codes font la même chose !!
enfait les réferences sont inventées dans le C++ juste pour faciliter la syntaxe (risque d'oublier l'operateur *)
0
kaoutar88 Messages postés 32 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 11 octobre 2009
30 sept. 2009 à 22:53
b1 compris, merci pr votre réponse
0
Et google , tu connais ?!!!
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
1 oct. 2009 à 16:25
je ne suis pas sur de la définition donnée par WATOU

pour moi, le passage par référence et par pointeur, c'est IDEM du coté du programme (modifications, etc...)
par contre, quadn on code, avec les référence on n'a plus à s'embeter avec les * et les ->

c'est donc un pointeur qu'on utilise comme une variable (ou objet) à part entière



rappel, pour un passage traditionnel, on passe une copie
0
watou Messages postés 199 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 19 avril 2013 28
1 oct. 2009 à 16:34
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
1 oct. 2009 à 16:41
ce que je lis sur tes liens ne contredit pas ma vision de la chose ;)

a la limite, le terme ALIAS est ce qui défini le mieux la référence... e n'ai pas vraiment souvent utilisé les références, peut etre que ma vision n'est pas complète.... ( je n'ai utilisé que lors de passages de fonctions Dans ce cas ma vision est bonne, c'est sur)

mais, si tu fais
int a = 5;
int &x=a;
a+=10;
cout<< x;

ca t'affiches 15 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
watou Messages postés 199 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 19 avril 2013 28
1 oct. 2009 à 17:01
Le passage par valeur d'un objet ou d'une structure demande une recopie de la valeur de ses membres (utilisant un contructeur de recopie pour les objets). L'avantage de passer une référence est d'éviter la recopie. Le mot const permet de garantir qu'aucun membre de l'objet ou de la structure n'est modifié par la fonction.

comme c'est ecrit dans le deuxieme lien !! c'es l'objet lui même qui est transmis (pas de copie !!)
je serais d'accord avec toi si c'etait du pascal !!!
en effet, quand on fait
function nomfonct(var a:integer):integer;

reellement on transmet un pointeur vers la fonction !! mais tout ça n'est pas visible à l'utilisateur
c'est le compilateur qui gère tout ça !

et si tu n'es pas encore convaincu !! essaie ça :

void fonct(int & b)
{
    cout << &b << endl; // afficher l'adresse
}
int a;
cout << &a << endl; // afficher l'adresse
fonct(a);


qu'est ce que tu conclus ?
et puis quand tu dis :
c'est donc un pointeur qu'on utilise comme une variable (ou objet) à part entière
!!!!!!!!!!!!!! ca n'a pas de sens ça !!
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
1 oct. 2009 à 17:21
L'avantage de passer une référence est d'éviter la recopie
c'es l'objet lui même qui est transmis (pas de copie !!)
avec un pointeur, tu es d'accord qu'on évite aussi la recopie, non ?

pour le pascal, j'ai jamais touché, je ne peux pas savoir.


toi: reellement on transmet un pointeur vers la fonction !! mais tout ça n'est pas visible à l'utilisateur
c'est le compilateur qui gère tout ça !

moi: c'est donc un pointeur qu'on utilise comme une variable (ou objet) à part entière

c'est ce que je disais, je me suis mal exprimé. On passe un pointeur (au niveau interne, donc pou r le compilo, l'execution, tout se passe comme avec un pointeur), et on l'utilise comme une variable normale(pour l'utilisateur c'est comme si on avait réellement passé l'objet, il continue à utiliser son objet comme s'il l'avait instancié sur la pile et les modifications seront faites sur l'objet dans la fonction appellante...)

donc ca reviens à dire que c'est un pointeur dont on a enlevé la syntaxe spécifique.

Je pense qu'on disais tout les deux la même chose, mais qu'on l'exprimais différemment ;)
0
watou Messages postés 199 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 19 avril 2013 28
1 oct. 2009 à 17:38
justement non !!
quand je disais : reellement on transmet un pointeur vers la fonction !! mais tout ça n'est pas visible à l'utilisateur
c pour le pascal !! pour le c++ c'est un autre principe !!!c'est les réferences !!

quand on définit une reference à une variable ya pas d'allocation memoire (donc pas de pointeur )!!
dans l'exemple que je t'ai donné : a et b ont la même adresse !! ils sont des synonymes
peut-être je m'exprime mal !! je te conseille de lire la partie des réferences et pointeurs ici :
https://cpp.developpez.com/cours/cpp/?page=page_6#LVI-F-5
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
1 oct. 2009 à 17:42
je tacherai de faire 2/3 essais chez moi pour essayer de mettre tout ca au clair dans mon cerveau ;)
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
1 oct. 2009 à 17:48
ca me rassure, ton site semble être d'accord avec moi: https://cpp.developpez.com/cours/cpp/?page=page_6#LVI-E

4.5. Lien entre les pointeurs et les références

Les références et les pointeurs sont étroitement liés. En effet, une variable et ses différentes références ont la même adresse, puisqu'elles permettent d'accéder à un même objet. Utiliser une référence pour manipuler un objet revient donc exactement au même que de manipuler un pointeur constant contenant l'adresse de cet objet. Les références permettent simplement d'obtenir le même résultat que les pointeurs, mais avec une plus grande facilité d'écriture.

je ferai quand meme un ou de essais que j'ai en tete...
0