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
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
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
30 sept. 2009 à 21:31
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 *)
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
30 sept. 2009 à 22:53
b1 compris, merci pr votre réponse
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
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
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
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
1 oct. 2009 à 16:34
@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
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
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 ?
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
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
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
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 !!
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
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 ;)
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 ;)
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
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
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
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
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 ;)
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
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...
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...