Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2830 connectés 

  FORUM HardWare.fr
  Programmation

  [Newbie] Passage par adresse d'un tableau de structure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Newbie] Passage par adresse d'un tableau de structure

n°87500
nrv_from_c​nr
Posté le 09-01-2002 à 17:33:30  profilanswer
 

Coucou !
S'il vous plais ne me prenez pas pour plus fort que je ne suis : je suis assez mauvais en C++, je commence ...
J'ai la structure suivante :
 
struct building{
    int E;
    int I;
}
 
Je créée ensuite un tableau de cette structure :
 
building appels[25].
 
Dans une fonction "Gestion(...)", je veux avoir accès en lecture-écriture à ce tableau ; quelle syntaxe écrire dans la déclaration de Gestion(...) ?
A l'appel, qu'écrire ?
Put... ça me gonfle de bloquer sur des trucs aussi bateau ...
Svp aidez moi ça va pas vous prendre longtemps ;-)
 
A+, Nrv ;-)

 

[edtdd]--Message édité par nrv_from_cnr--[/edtdd]

mood
Publicité
Posté le 09-01-2002 à 17:33:30  profilanswer
 

n°87506
Alload
Posté le 09-01-2002 à 17:55:42  profilanswer
 

Pour utiliser ton tableau dans ta fonction Gestion() et pour accéder aux variables, voilà comment il faut faire:
 
int Gestion(building* pointeur)
{
//Par exemple
 
int e, i;
 
e = pointeur[x]->E;
i = pointeur[x]->I;
 
return 0;
}

n°87507
Alload
Posté le 09-01-2002 à 17:56:25  profilanswer
 

Pour écrire dans la tableau c'est pareil:
 
pointeur[x]->E = cequetuveux;
pointeur[x]->I = cequetuceux;

n°87511
Ventilo
Ventilo? Depuis 1998!
Posté le 09-01-2002 à 18:08:04  profilanswer
 

Peut-être que ce qu'il voulait dire, c'est qu'il veut passer son tableau en argument...
 
int Gestion(building *bob)
{
 
for (int i =0; i<=25;i++)
{
    bob++;
    bob->asdasdasd
}
    return 0;
}
 
chuis pas sur...

n°87517
nrv_from_c​nr
Posté le 09-01-2002 à 18:16:46  profilanswer
 

Merci bcp pour les réponses !
Et dans la déclaration de ma fonction Gestion(...), je marque quoi à la place des "..." ?
Merci d'avance !
J'essaye ça tout de suite ...
A+, Nrv ;-)

n°87521
nrv_from_c​nr
Posté le 09-01-2002 à 18:23:06  profilanswer
 

Question stupide de ma part que la précédente ;  
à l'appel, ça donne quoi je voulais dire ;-)
qq c du genre :
 
Gestion(int entier, &appels);
 
??
 
A+, Nrv ;-)

n°87524
nrv_from_c​nr
Posté le 09-01-2002 à 18:34:55  profilanswer
 

Ca a l'air de passer comme ci-dessus.
 
Par contre, je veux now plus compliqué :-) :
 
Maintenant que j'ai mon "appels[25]", je veux l'appeler de Gestion :
 
Gestion(&appels);
 
Qui alors cascade le traitement :
 
[Dans Gestion.cpp] :
appels[12]->I = 5 ;
Gestion2(Building* appels);
 
J'ai le droit de cascader les passages par adresse comme ça ?
A+, Nrv ;-)

n°87537
nrv_from_c​nr
Posté le 09-01-2002 à 19:19:01  profilanswer
 

Up !
Nrv ;-)

n°87551
Alload
Posté le 09-01-2002 à 19:47:46  profilanswer
 

Tu pourrais expliquer exactement ce que tu veux faire, parce que je comprends pas ce qu'est ta fonction Gestion2().

n°87553
nrv_from_c​nr
Posté le 09-01-2002 à 19:53:31  profilanswer
 

Ce que je veux faire ... ça fait un rien compliqué à expliquer, c'est dans le cadre d'un projet d'info à rendre ... lundi.
Je ne peux t'expliquer le tout dans son ensemble, tu t'en doutes ; cela dit, à un moment donnée, je suis obligé de découper mes fonctions en morceaux (trop grosses, pas à mes yeux mais à ceux du prof).
Aussi, je doit "sous traiter" certaines actions à des sous-fonctions, etc.
Dans le cas courant, il me manque la syntaxe qui va bien pour faire :
 
[Main()]
building appels[25]
gestion(&appels);
 
[Gestion.cpp]
gestion2(building* appels[]);
 
Cette syntaxe est fausse : le deuxième passage par adresse est buggé jusqu'à l'os ;-) j'arrive pas à voir comment faire ...
 
Voili voilà, en espérant ne pas avoir trop éludé ta question ...
Ce qui est sûr, c'est que je n'ai pas le choix ;-)
 
A+, Nrv ;-)

 

[edtdd]--Message édité par nrv_from_cnr--[/edtdd]

mood
Publicité
Posté le 09-01-2002 à 19:53:31  profilanswer
 

n°87561
deathsharp
Posté le 09-01-2002 à 20:20:32  profilanswer
 

Code :
  1. struct building{
  2.     int E;
  3.     int I;
  4. };
  5. void Gestion( unsigned int count, building tab[] )
  6. {
  7.     for( int i=0; i<count; i++ ) {
  8.         tab[i].E = i;
  9.         tab[i].I = i*2;
  10.     }
  11. }
  12. void Gestion_disp( unsigned int count, building *tab )
  13. {
  14.     for( int i=0; i<count; i++ ) {
  15.         printf( "tab[%d]->E= %d\n", i, tab->E );
  16.         printf( "tab[%d]->I= %d\n", i, tab->I );
  17.         tab++;            // "passe" a l'element suivant
  18.     }
  19. }
  20. const int size = 5;
  21. int main()
  22. {
  23.     building t[size];
  24.     Gestion( size, t );
  25.     Gestion_disp( size, t );
  26. }


 
deux exemple pour acceder au tableau de deux manieres diff
 
 
 
Alload:

Code :
  1. int Gestion(building* pointeur)
  2. {
  3. //Par exemple  
  4. int e, i;
  5. e = pointeur[x]->E;
  6. i = pointeur[x]->I;
  7. return 0;
  8. }


 
ca marchera jamais puisque le tab n'est pas un tableau de pointeur.

 

[edtdd]--Message édité par deathsharp--[/edtdd]


---------------
What butter and whiskey won't cure, there is no cure for.
n°87569
nrv_from_c​nr
Posté le 09-01-2002 à 20:35:02  profilanswer
 

Avant tout, merci bcp pour ton implication.  
Ca fait vraiment plaisir de voir que l'on peut être aidé !
 
Cela dit c'est encore un peu différent ; je m'explique.
 
Si je reprends ton formalisme, ce que je cherche à faire c'est appeler gestion_disp() à partir de Gestion().
 
 
void Gestion( unsigned int count, building tab[] )  
{  
   for( int i=0; i<count; i++ ) {  
       tab[i].E = i;  
       tab[i].I = i*2;  
   }  
   Gestion_disp(size, [???] );
}  
 
 
Et ce que je ne n'arrive pas à trouver, c'est que mettre à la place de " [???] " pour que l'on ai un passage par adresse de "tab" appartenant à Gestion(), dans Gestion_disp().
 
En effet, ma fonction "Gestion_disp()" (si je puis dire) agis et modifie "tab" ; il ne s'agirai pas, une fois "gestion_disp" quittée et de retour dans "gestion()", qu'aucune des modifs apportées ne soient sauvegardées !
 
Merci encore pour le temps que tu as pris pour me rendre service ...
 
Une dernière question donc ;-) : je met quoi à la place de [???] ?
D'avance merci et j'arrête de t'embêter ...
 
C'est déjà abusé je trouve ...
A+, Nrv ;-)

n°87575
deathsharp
Posté le 09-01-2002 à 21:03:21  profilanswer
 

tu remplace le machin par tab
tab c l'address du tableau.
tu peux la repasser et sa pointera tjrs sur le tableau.
par contre ne la modifie pas dans Gestion avec ++ par ex sinon ca va pointer sur un autre element que le premier.
j'espere t'avoir aider :)  
 
et pi t'inquete pas t'embete pas: si tu m'embeterrai je t'aurai pas repondu :p  
et puis j'aime bien rendre service quand c demander gentillement
hesite pas


---------------
What butter and whiskey won't cure, there is no cure for.
n°87577
Alload
Posté le 09-01-2002 à 21:11:08  profilanswer
 

deathsharp > si on a un pointeur vers un tableau de données, on peut se rendre à chaque élément du tableau en utilisant pointeur++, pointeur--, etc... ?

n°87578
deathsharp
Posté le 09-01-2002 à 21:12:07  profilanswer
 

sauf erreur oui


---------------
What butter and whiskey won't cure, there is no cure for.
n°87579
Alload
Posté le 09-01-2002 à 21:17:34  profilanswer
 

Cool alors :) Je savais pas. Merci.
 
Au fait, t'es en quelle classe nrv_from_cnr pour avoir à faire un sujet comme celui-ci?

n°87580
deathsharp
Posté le 09-01-2002 à 21:18:37  profilanswer
 

juste fait gaffe avec ++ et -- si tu veux retrouver le debut apres...
tu fais une copie du pointeur a la limit


---------------
What butter and whiskey won't cure, there is no cure for.
n°87585
nrv_from_c​nr
Posté le 09-01-2002 à 21:33:34  profilanswer
 

Belle philosophie, qui m'arrange en plus !
N'empêche c'est vraiment sympa !
Si tu m'as aidé : oui, j'ai appris plein de choses sur ce topic  :)  
See ya et merci encore !
A+, Nrv  :ange:

n°87586
nrv_from_c​nr
Posté le 09-01-2002 à 21:43:28  profilanswer
 

PROGRAMME INTEGRALEMENT DEBUGGE ! ! ! !  
En plus d'être le Dieu de la Patience deathsharp, tu es mon Dieu à moi ! !
A+ Nrv  :)  :)  :)  :)

n°87589
deathsharp
Posté le 09-01-2002 à 21:59:17  profilanswer
 

:sol:  
en generale jsuis pas patient sauf dans ce ke j'aime bien: style la prog
par contre la queue a la banque en ce moment... :fou:


---------------
What butter and whiskey won't cure, there is no cure for.
n°87590
nrv_from_c​nr
Posté le 09-01-2002 à 22:01:59  profilanswer
 

Moi c'est plutôt la queue à la Poste qui me tue !
Surtout qd on commence derrière les portes coulissantes  :ouch:  
;-)
Nrv

n°87591
nrv_from_c​nr
Posté le 09-01-2002 à 22:06:10  profilanswer
 

AAARGHH !
Non c'est pas possible !
J'ai une autre mer _ _ , mais plus petite celle là ...
Dans mon App MFC Dialog Based, je déclare dans le "OnInitDialog()" mon tableau de struct ; j'y ai pas accès dans le OnPaint() ! C'est normal docteur ?
A+, Nrv ;-)

n°87592
deathsharp
Posté le 09-01-2002 à 22:06:31  profilanswer
 

ben la poste c pareil :(  
je crois que au lieu d'echanger mes francs v aller me trouver un maillot de hokey des Blackhawks :D

 

[edtdd]--Message édité par deathsharp--[/edtdd]


---------------
What butter and whiskey won't cure, there is no cure for.
n°87599
Alload
Posté le 09-01-2002 à 22:14:13  profilanswer
 

Oui c'est normal, parce que tu initialises localement ton tableau, et donc tu ne peux y accèder dans une autre fonction (OnPaint).
 
Initialise le globalement ou simplement dans la fonction WinMain().

 

[edtdd]--Message édité par Alload--[/edtdd]

n°87601
nrv_from_c​nr
Posté le 09-01-2002 à 22:18:30  profilanswer
 

Hé hé ...
C'est là que ça deviens rigolo (tu vas adorer , si j'ai bien compris  ;) ) ...
Le tableau n'est pas de taille fixe : c'est l'utilisateur qui choisi sa taille, par l'intermédiaire d'une autre boite de dialogue ;  
elle est initialisée de la sorte : building* appels = new Builing[Taille];
Avec "Taille" choisie par l'utilisateur donc ;-)
 
Donc si j'ai bien compris, un tableau devant être de taille fixée, ... ???
 
Nrv ;-)

n°87605
Alload
Posté le 09-01-2002 à 22:22:24  profilanswer
 

Si tu veux utiliser un tableau dynamique, tu peux utiliser les vecteurs déclaré dans vector.h.
 
Si tu connais pas:
 
_ déclarer ton vecteur: vector<building*> appels
_ ajouter un membre: appels.push_back(new building)
_ accéder à un membre: appels[i]->E ou appels[i]->I
 
Un vecteur est vierge lorsque que tu l'initialises.

n°87607
Alload
Posté le 09-01-2002 à 22:22:58  profilanswer
 

Après tu peux utiliser des fonctions membres du vecteur:
 
resize, erase, etc... qui sont très pratiques.

n°87611
deathsharp
Posté le 09-01-2002 à 22:24:33  profilanswer
 

mais tu peux tres bien garder ton tableau... :) ( jsuis pas un grand fana de la STL )


---------------
What butter and whiskey won't cure, there is no cure for.
n°87613
nrv_from_c​nr
Posté le 09-01-2002 à 22:30:43  profilanswer
 

Bon ben ... ch'uis un peu obligé de passer en vector alors :-)
c'est ça  :heink:
Ok initialisation globale alors ...
Et ... même syntaxe pour pour les tableaux, dans les passages par adresse  :crazy:  
Y perd pas le Nord le Nrv  :pt1cable:

n°87615
nrv_from_c​nr
Posté le 09-01-2002 à 22:32:32  profilanswer
 

Remarque j'aurai pu faire un truc dégeu :
initialiser un tableau en global, de taille [la taille maxi admissible, càd 55]  :sol:  
Mais là, c'est vous 2 qui allaient faire un infarctus  :lol:  
A+, Nrv  ;)

 

[edtdd]--Message édité par nrv_from_cnr--[/edtdd]

n°87616
Alload
Posté le 09-01-2002 à 22:34:08  profilanswer
 

Ben tu pourrais faire ça, ça prendra pas trop de mémoire en trop. Mais si c'est pour l'école, ça va pas le faire devant le prof :D
 
Sinon, moi j'aime bien les vecteurs, c'est extrèmement pratique je trouve.

n°87617
deathsharp
Posté le 09-01-2002 à 22:35:57  profilanswer
 

g vue un OnPaint qq part... donc tu utilise MFC ( :o )
tu pourrais tres bien mettre  

Code :
  1. building* appels

dans la definition de la classe, init a NULL dans le constructeur et puis faire une fonction qui alloue de la memoire. ( et bien deallocation dans destructeur )

 

[edtdd]--Message édité par deathsharp--[/edtdd]


---------------
What butter and whiskey won't cure, there is no cure for.
n°87619
nrv_from_c​nr
Posté le 09-01-2002 à 22:37:03  profilanswer
 

C'est clair que ça à l'air puissant !
Un Pb toutefois : ça a pas l'air de marcher ... un #include "vector.h" Ok ;
En global : vector <Building*> appels ; //juste après déclaration de la structure Building
 
Message d'erreur : "missing storage-class or type specifiers"
 
 :heink:  
 
Nrv ;-)

n°87623
Alload
Posté le 09-01-2002 à 22:40:31  profilanswer
 

Ben l'initialisation du vecteur semble pas avoir d'erreur pourtant.

n°87624
nrv_from_c​nr
Posté le 09-01-2002 à 22:40:46  profilanswer
 

deathsharp : ta solution me plais ! Pas besoin de recorriger les 10 000 occurences dans mon Pg  ;)  
Par contre, pour changer, je suis trop fort en C++  :pt1cable:  
Mais si je définit "appels" dans la classe OnPaint, j'y aurai accès ailleurs, dans les autres fonctions ?!
Quand à la fonction qui alloue de la mémoire (malloc ? je sais plus moi Argh !)  :eek2:  
Nrv  :hap:

n°87626
deathsharp
Posté le 09-01-2002 à 22:43:06  profilanswer
 

malloc -> pas bien en c++ :non:  
 
utilise new a la place et delete


---------------
What butter and whiskey won't cure, there is no cure for.
n°87627
Alload
Posté le 09-01-2002 à 22:43:36  profilanswer
 

Pour allouer de la mémoire:
 
_ malloc c'est en C.
_ en C++ tu utilises new ou new[].

n°87628
Alload
Posté le 09-01-2002 à 22:43:53  profilanswer
 

A 30 secondes près :D

n°87630
deathsharp
Posté le 09-01-2002 à 22:45:41  profilanswer
 

:sol:


---------------
What butter and whiskey won't cure, there is no cure for.
n°87632
nrv_from_c​nr
Posté le 09-01-2002 à 22:51:37  profilanswer
 

A 30 mois près pour moi  :sarcastic:  
J'ai fait ça pas propre, et now je me rend compte que je vais avoir un peu de débugage en fait ;-)
Merci à vous 2 pour ces discutions très instructives !
A+, Nrv :-)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Newbie] Passage par adresse d'un tableau de structure

 

Sujets relatifs
[VB] Tableau en mémoireNeed help ! Tableau de pointeurs en c++
help the newbie ==== comment kon fait un forumrécupérer une adresse IP client
[java] convertir un vecteur en un tableau a 2 dimProbleme de 'passage' de variable en javascript
Newbie de la programmation[HTML] % dans un tableau
[html] image de fond d'un tableauQuestion de newbie: c'est quoi php nuke ??
Plus de sujets relatifs à : [Newbie] Passage par adresse d'un tableau de structure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR