signification de la double etoile **

signification de la double etoile ** - C++ - Programmation

Marsh Posté le 11-11-2003 à 20:21:42    

Comme dans ce code ,car je ne comprend pas tres bien comment faire une alloction dyn de tableau.
 
Ne pourrions nous pas ecrire directement dans ConstruitEtoiles():
Etoiles=new TEtoile*[nbetoiles];
 

Code :
  1. class TForm1 : public TForm
  2. {
  3.     //...
  4.     public:
  5.     TEtoile **Etoiles;
  6.     void ConstruitEtoiles(const int nbetoiles);
  7.     void LibereEtoiles();
  8.     //...
  9. void ConstruitEtoiles(const int nbetoiles)
  10. {
  11.     Etoiles=new Etoile*[nbetoiles];
  12.     for (int i=0; inbetoiles; i++)
  13.         Etoiles[i]=new Etoile;
  14. }
  15. };


Message édité par bleuerouge le 11-11-2003 à 20:58:27
Reply

Marsh Posté le 11-11-2003 à 20:21:42   

Reply

Marsh Posté le 11-11-2003 à 20:24:13    

mauvaise sous cat :O
 
ouais t'aurais pu, mais bon, sdepend ske tu veux faire, koi, jveux dire

Reply

Marsh Posté le 11-11-2003 à 20:41:12    

Et faut pas mettre de [...] dans les titres (ici "[débutant]" parce que ça cache le nom de la sous-cat dans laquelle est le topic)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 11-11-2003 à 20:41:40    

chrisbk a écrit :

mauvaise sous cat :O
 
ouais t'aurais pu, mais bon, sdepend ske tu veux faire, koi, jveux dire
 


 
J'ai ce code

Code :
  1. struct Tjoueur {
  2.                 char nomdujoueur [20];
  3.                 int jeux;
  4.                 int point;
  5.                 };
  6. void init_jeux(void)
  7. {
  8.     int nombre_de_joueur; // nombre de joueur
  9.     printf("Combien de joueur :" );
  10.     scanf ("%d",&nombre_de_joueur);
  11.     joueur= new Tjoueur*[nombre_de_joueur];


 
mais a la complile j'ai:
 
"main.cpp": E2451 Undefined symbol 'joueur' in function init_jeux() at line 61
 
le but est tout simplement de crée un tableau joueur de Tjoueur avec le nombre d'iteration de nombre_de_joueur

Reply

Marsh Posté le 11-11-2003 à 20:43:21    

bleuerouge a écrit :


TJoueur** joueur= new Tjoueur*[nombre_de_joueur];


 :o


Message édité par schnapsmann le 11-11-2003 à 20:49:03

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 11-11-2003 à 20:56:41    

Ok comme ca le compilateur le prend, mais pourqoui deux etoile ?
concretement pour comprendre, a quoi ça sert de declarer de cette facon ??

Reply

Marsh Posté le 11-11-2003 à 20:57:34    

bleuerouge> C'est quoi une seule étoile ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 11-11-2003 à 20:59:30    

soit T un type C++.
 
Le type retourné par "new T[N]" est "un pointeur sur T", à savoir "T*".
 
Donc le type de retour de "new T*[N]" est "T**".
etc


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 11-11-2003 à 21:01:14    

bleuerouge a écrit :

Ok comme ca le compilateur le prend, mais pourqoui deux etoile ?
concretement pour comprendre, a quoi ça sert de declarer de cette facon ??


ça veut dire que tu déclares un pointeur sur un pointeur. Et comme un pointeur est aussi l'adresse du 1er élément d'un tableau, ça veut aussi dire que tu déclares un pointeur sur un tableau de pointeurs d'objets Etoile !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-11-2003 à 21:36:33    

Harkonnen a écrit :


ça veut dire que tu déclares un pointeur sur un pointeur. Et comme un pointeur est aussi l'adresse du 1er élément d'un tableau, ça veut aussi dire que tu déclares un pointeur sur un tableau de pointeurs d'objets Etoile !


 
bon ok ,mais pour l'initialisation avec new
 

Code :
  1. // Initialisation du nom
  2. for (int boucle=0;boucle<nombre_de_joueur;boucle++)
  3.         {
  4.         printf("Nom du joueur %d:",boucle);
  5.         scanf("%c",&joueur[boucle]->nomdujoueur);
  6.         };


 
Or ca passe bien a la compile ,mais a l'execution ,for me saute un iteration et a l'insertion du premeir nom j'ai un acces violation avec fermeture de l'app. ,doijent utilisez un sizeof ou autre malloc ???

Reply

Marsh Posté le 11-11-2003 à 21:36:33   

Reply

Marsh Posté le 12-11-2003 à 00:19:12    

niet good tout ça
 
scanf("%s",joueur[boucle]->nomdujoueur); [:aloy]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 12-11-2003 à 00:20:12    

je sens la profonde incompréhension de ce qu'est un pointeur

Reply

Marsh Posté le 12-11-2003 à 00:25:44    

pourtant, c'est ballot  :fou:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 12-11-2003 à 09:22:01    

en corrigeant de cette facon ,cela regle certains problemes:

Code :
  1. printf("Combien de joueur :" );
  2.     scanf ("%d",&nombre_de_joueur);
  3.     Tjoueur** joueur= new Tjoueur*[nombre_de_joueur];
  4.     for (int boucle=0;nombre_de_joueur;boucle++)
  5.         {
  6.         printf("Nom du joueur %d:",boucle);
  7.         //scanf("%s",&joueur[boucle]->nom_du_joueur);
  8.         scanf("%s",joueur[boucle]->nomdujoueur);
  9.         };
  10.     };


 
mais j'ai toujours un acces violation a l'execution


Message édité par bleuerouge le 12-11-2003 à 09:22:38
Reply

Marsh Posté le 12-11-2003 à 09:23:42    

SchnapsMann a écrit :

niet good tout ça
 
scanf("%s",joueur[boucle]->nomdujoueur); [:aloy]


 
marche pas le compilo me repond alors
 
"main.cpp": E2316 'nomdujoueur' is not a member of 'Tjoueur' in function init_jeux() at line 69

Reply

Marsh Posté le 12-11-2003 à 09:24:43    

c'est logique que ça plante, tu alloues un tableau de pointeurs...
donc dans ton scanf tu accèdes à un indice de ton tableau, donc à un pointeur. Or, seul ton tableau est alloué, pas les pointeurs contenus dedans...
Tu devrais rajouter juste après le for:

Code :
  1. joueur[boucle] = new Tjoueur;


Message édité par Moktar1er le 12-11-2003 à 09:25:06
Reply

Marsh Posté le 12-11-2003 à 10:12:49    

mondieumondieumondieu

Reply

Marsh Posté le 12-11-2003 à 10:20:54    

http://perso.wanadoo.fr/atil/forum/stombe.gif

Reply

Marsh Posté le 12-11-2003 à 10:49:36    

* est un constructeur de types unaire (en sémantique statique, car mettre une sémantique dynamique là-dessus, la recherche universitaire est encore en train d'essayer).
 
 
edit : comment ça je sors ?


Message édité par nraynaud le 12-11-2003 à 10:50:00

---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

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