Pointeur sur tableau de structure

Pointeur sur tableau de structure - C - Programmation

Marsh Posté le 06-02-2014 à 16:09:04    

Bonjour  
 
je suis en train de travailler sur une fonction qui a besoin d'un tableau de structure en argument.  
J'essaye de passer à ma fonction un pointeur vers ce tableau de structure mais je n'arrive pas à faire comprendre à mon compilo ce qu'il faut
 

Code :
  1. //Ma structure
  2. typedef struct
  3. {
  4.     int     Identifiant;
  5.     int     Index;
  6.     char    Nom[50];
  7. } s_Infos;
  8. main(void)
  9. (
  10.     s_Infos MyName[10];
  11.    
  12.     //Action sur My Name ...     
  13.    
  14.     CheckInfos(MyName);//le problème est ici ! je ne comprend pas comment passer ce paramètre !
  15. }
  16. void CheckInfos(s_Infos* Data[])
  17. {
  18.     //Code
  19. }


 
Si vous avez des idées, je suis preneur
 
 
quand j'appel ma fonctionne comme ça  

Code :
  1. CheckInfos(MyName);


j'ai le message

argument of type "s_Infos *" is incompatible with parameter of type "s_Infos **"


 
 
quand j'appel ma fonctionne comme ça  

Code :
  1. CheckInfos(&MyName);


j'ai le message

argument of type "s_Infos (*)[10]" is incompatible with parameter of type "s_Infos **"

Message cité 1 fois
Message édité par Digaboy le 06-02-2014 à 16:21:21
Reply

Marsh Posté le 06-02-2014 à 16:09:04   

Reply

Marsh Posté le 06-02-2014 à 17:27:39    

Digaboy a écrit :

Bonjour

 

je suis en train de travailler sur une fonction qui a besoin d'un tableau de structure en argument.
J'essaye de passer à ma fonction un pointeur vers ce tableau de structure mais je n'arrive pas à faire comprendre à mon compilo ce qu'il faut

 
Code :
  1. //Ma structure
  2. typedef struct
  3. {
  4.     int     Identifiant;
  5.     int     Index;
  6.     char    Nom[50];
  7. } s_Infos;
  8. main(void)
  9. (
  10.     s_Infos MyName[10];
  11.    
  12.     //Action sur My Name ...   
  13.    
  14.     CheckInfos(MyName);//le problème est ici ! je ne comprend pas comment passer ce paramètre !
  15. }
  16. void CheckInfos(s_Infos* Data[])
  17. {
  18.     //Code
  19. }
 

Si vous avez des idées, je suis preneur

 


quand j'appel ma fonctionne comme ça

Code :
  1. CheckInfos(MyName);


j'ai le message

argument of type "s_Infos *" is incompatible with parameter of type "s_Infos **"

 


quand j'appel ma fonctionne comme ça

Code :
  1. CheckInfos(&MyName);


j'ai le message

argument of type "s_Infos (*)[10]" is incompatible with parameter of type "s_Infos **"


 


(Edit pour plus de simplicité)

Code :
  1. void CheckInfos(s_Infos **Data)
  2. {
  3.     //Code
  4. }
 

Re-edit : En fait, non, j'ai faux. Tu dois juste passer un pointeur sur le premier élément dans ton cas. Tu n'as pas besoin de plus.

Code :
  1. void CheckInfos(s_Infos *Data)
  2. {
  3.     //Code
  4. }
  5. main(void)
  6. (
  7.     s_Infos MyName[10];
  8.    
  9.     //Action sur My Name ...   
  10.    
  11.     CheckInfos(MyName);
  12. }
 

devrait fonctionner. Attention, cela dit, c'est souvent une meilleure habitude de passer la taille de ton tableau en paramètre supplémentaire.


Message édité par theshockwave le 06-02-2014 à 17:31:38

---------------
last.fm
Reply

Marsh Posté le 06-02-2014 à 17:46:58    

merci de ta réponse mais j'avais testé cette solution et je ne l'avais pas retenu car je ne voyais que le premier élément (et non pas un tableau de structure) dans mon espion de variable
 
mais si je fais abstraction de l'espion et que je me sers de ma structure comme d'un tableau ça marche comme je veux.  
 
en fait ce qui me dérange plus dans cette solution c'est qu'on passe un pointeur vers une structure et qu'on ne passe pas l'information qu'il s'agit d'un tableau de structure.  
 
dans tout les cas merci bien
 
EDIT: en fait je me suis compliqué la vie pour rien.  
 
J'ai trouvé  cette conversation qui résume bien le problème et où différentes solutions sont proposés et argumentés
http://fr.openclassrooms.com/forum [...] ture-86064


Message édité par Digaboy le 06-02-2014 à 17:59:00
Reply

Marsh Posté le 06-02-2014 à 18:24:57    

l'observeur de variable de ton debugger ne t'affiche que le peu qu'il sait de ta variable. En l'occurrence, sur un tableau, tu en sais plus que lui lorsque tu passes ce tableau en paramètre à une fonction.
 
Quoiqu'il en soit, tant mieux si tu as trouvé ton bonheur là-bas, mais c'est toujours mieux d'avoir la solution aux problèmes ici-même plutôt que dans un lien (qui pourrait devenir obsolète un jour) pour les futurs membres :)


---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

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