Passage de paramètre (par référence / par valeur) [Résolu]

Signaler
Messages postés
186
Date d'inscription
lundi 11 mars 2002
Statut
Membre
Dernière intervention
30 novembre 2010
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Salut,

Je début en cpp (je viens de vb et java) donc tout à apprendre des pointeurs.

Bref

j'ai le code suivant

unsigned char *pBuffer = NULL;
getBuffer(pBuffer); // La fonction alloue la mémoire : void getBuffer(unsigned char *pBuffer)

//

donc je prend ma méthode getBuffer() et je me la met dans une classe.

MaClasse *o = new MaClasse()
unsigned char *pBuffer = NULL;
o->getBuffer(pBuffer);

-->
Si la méthode getBuffer() garde la même signature, le buffer est bien créé en interne mais sortie de la méthode, pBuffer pointe sur NULL!
Par contre si la méthode est la suivante : void getBuffer(unsigned char *&pBuffer), ca marche ????

QUe signifie *& ???
Pourquoi ça marche si la fonction est dans le même fichier source et pas dans la classe ?

Merci

4 réponses

Messages postés
402
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
21 juillet 2005
1
Euh oui on peut le voir comme ça :)

Je ne connais pas vraiment les grosse différence entre ces deux méthode seulement je pense qu'en C++ il est mieux d'utiliser les références, pourtant l'opérateur * permettant le déréfenrecement d'un pointeur est également disponible en C++ donc je ne sais pas trop quoi te conseiller....

Mais les deux méthodes marche :)

ciao ;)

:.: [DmXx] [[irc://irc.quakenet.org/ex-concept #eX-Concept @ QNet]] :.:
Messages postés
402
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
21 juillet 2005
1
getBuffer(pBuffer); va utilise une copie de pBuffer et allouer de la mémoire pour celle-ci...

Soit tu fais:

getBuffer( unsigned char **ppBuffer ); et tu alloue la mémoire pour *ppBuffer ! Ou bien tu utilise les références du C++:

getBuffer( unsigned char &rBuffer )

Ensuite il te suffit d'allouer la mémoire pour rBuffer, les références sont disponible depuis C++ et donc pas en C ;)

je pense que c'est tout :)

ciao :)

:.: [DmXx] [[irc://irc.quakenet.org/ex-concept #eX-Concept @ QNet]] :.:
Messages postés
186
Date d'inscription
lundi 11 mars 2002
Statut
Membre
Dernière intervention
30 novembre 2010
2
Merci

Réponse rapide (5mn) et efficace !!

Je comprend mieux maintenant les paramêtres du genre **ppObject qu' utilise certaine fonction pour retourner une instance qu'elle crait.

La compatiblité vers C est elle la seule raison pour le choix d'une des deux méthodes ?

Nico
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
c'est tellment mieux le passage par reference en c++, rien que pour l'abstraction qu'on n'a pas avec le passage par pointeur, le passage de tableau par reference...