C++
Résolu
kaoutar88
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
Nabla's Messages postés 18203 Date d'inscription Statut Contributeur Dernière intervention -
Nabla's Messages postés 18203 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
quelle est la différence entre le passage par adresse et le passage par référence en C++ ??
quelle est la différence entre le passage par adresse et le passage par référence en C++ ??
7 réponses
passage par adresse:
on transmet un pointeur vers l'objet à la fonction !!
ex:
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:
{
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 *)
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 *)
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
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
@nabla's : si tu n'es pas convaincu !! regarde ici :
https://fr.wikibooks.org/wiki/Programmation_C%2B%2B/Les_r%C3%A9f%C3%A9rences
et ici :
https://fr.wikibooks.org/wiki/Programmation_C_plus_plus_Les_fonctions#Passage_de_param.C3.A8tres_par_r.C3.A9f.C3.A9rence
https://fr.wikibooks.org/wiki/Programmation_C%2B%2B/Les_r%C3%A9f%C3%A9rences
et ici :
https://fr.wikibooks.org/wiki/Programmation_C_plus_plus_Les_fonctions#Passage_de_param.C3.A8tres_par_r.C3.A9f.C3.A9rence
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 ?
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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 :
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 !!
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 !!
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 ;)
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 ;)
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
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
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...
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...