Probleme de references

Probleme de references - C++ - Programmation

Marsh Posté le 06-11-2005 à 20:51:51    

Bonjour,
 
J'essaye de comprendre un code que j'ai ecrit en fait cela se porte sur la fct avec le proto construiren(Noeud *&,int)
 
Je n'arrive pas expliquer pourquoi avec ce proto cela marche, et pas avec ce proto construiren(Noeud *, int), ici mon arbre ne construit qu'un noeud
 
merci de m'expliquer et de me dire si cela ce fait car j'en doute je trouve ce la byzarre
 

Code :
  1. //
  2. #include <iostream>
  3. #include "arbre.h"
  4. using namespace std;
  5. Arbre::Arbre(){
  6.   racine=NULL;
  7.   noeudc=NULL;
  8. }
  9. void Arbre::construire(int v){
  10.  
  11.   construiren(racine,v);
  12. }
  13. void Arbre::construiren(Noeud *&r, int v){
  14.   if(r==NULL) {
  15.     r = new Noeud;
  16.     r->v = v;
  17.     r->fg= NULL;
  18.     r->fd = NULL;
  19.     if(racine==NULL)  racine=r;
  20.     cout << *&r <<  " " << &r << endl;
  21.    }
  22.   else {
  23.     if(v <= r->v){
  24.       construiren(r->fg,v);
  25.     }
  26.     else {
  27.       construiren(r->fd,v);
  28.     }
  29. }
  30. }
  31. void Arbre::affiche(){
  32.   affichen(racine);
  33.  
  34. }
  35. void Arbre::affichen(Noeud *r){
  36.   if(r!=NULL){
  37.     // cout<< r->v << " " << "v" << endl;
  38.     affichen(r->fg);
  39.     affichen(r->fd);
  40.   }
  41. }


Message édité par asphro le 06-11-2005 à 20:52:18
Reply

Marsh Posté le 06-11-2005 à 20:51:51   

Reply

Marsh Posté le 06-11-2005 à 20:52:38    

[:banguy]  
 
de retour ici ?


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 06-11-2005 à 21:03:55    

Le retour de quoi, c'est un void...
 
 
PS:Ceci est de l'humour...sinon...confére  message d'en  dessous...


Message édité par asphro le 06-11-2005 à 21:28:31
Reply

Marsh Posté le 06-11-2005 à 21:19:04    

[:rolf]
 
et le pire c'est qu'il le fait pas expres


Message édité par KangOl le 06-11-2005 à 21:19:27

---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 07-11-2005 à 00:08:21    

Noeud* r , tu passe un pointeur par valuer, ton code le modifie mais ne le renvoie pas.
 
C'est soit Noeud*& soit Noeud**

Reply

Marsh Posté le 07-11-2005 à 16:32:02    

Code :
  1. void Arbre::construiren(Noeud **r, int v){
  2.   if(*r==NULL) {
  3.     *r = new Noeud;
  4.     (*r)->v = v;
  5.     (*r)->fg= NULL;
  6.     (*r)->fd = NULL;
  7.     if(racine==NULL)  racine=*r;
  8.  
  9.    }
  10.   else {
  11.     if(v <= (*r)->v){
  12.       construiren(&((*r)->fg),v);
  13.     }
  14.     else {
  15.       construiren(&((*r)->fd),v);
  16.     }
  17. }
  18. }


 
ah oui en effet en recuperant l'adresse du pointeur cela revient ua même que la reférence sur le pointeurs (si je dis une connerie corrigé moi surtout), j'ai un peu de mal avec c'est pointeur et reference sorti d'un certain contexte....
 
mais l'ecriture est drolement sale ecrit ainsi...

Reply

Marsh Posté le 07-11-2005 à 17:10:37    

Noeud*& c'est mieux quand même :o
Le vrai truc sal c'est le Noeud* a la base ...

Reply

Marsh Posté le 07-11-2005 à 17:12:44    

j'aurai du redefinir un type noeud *

Reply

Marsh Posté le 07-11-2005 à 17:13:42    

non mais te demandais si le ponteur etait necessaire, y a quand même des kilos de conteneur dans std et dans boost ...

Reply

Marsh Posté le 07-11-2005 à 17:22:20    

non mais le but etant à la base de comprendre les pointeurs et les references...donc je ne vais pas m'amuser à l'outrepasser.
 
etant novice je ne connais pas encore toutes les lib std, ou la boost lib.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed