Passage de paramètre (par référence / par valeur)

Résolu
thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 - 13 sept. 2004 à 12:30
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 13 sept. 2004 à 20:18
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

D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 1
13 sept. 2004 à 13:11
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]] :.:
3
D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 1
13 sept. 2004 à 12:34
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]] :.:
0
thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 3
13 sept. 2004 à 12:57
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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
13 sept. 2004 à 20:18
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...
0
Rejoignez-nous