tableau de pointeur sur structure dans une structure

tableau de pointeur sur structure dans une structure - C - Programmation

Marsh Posté le 10-04-2013 à 01:05:10    

tout est dans le titre, j'aimerais faire un tableau de 7 pointeurs sur différentes structures et la tableau doit être lui même dans une structure
 
j'avais pris exemple sur une déclaration avec un alias typedef dans la déclaration du tableau  
l'alias ne semble pas marcher car la déclaration du tableau est dans le meme type de structure sur laquelle il pointe et l'alias n'a pas encore son nom d'alias qui est à la fin de la struct.
En remplacant par le nom complet "struct..." ca n'avait pas marché.
 
je veux bien mettre mon code si besoin est.
 
donc voilà si quelqu'un pouvait m'aider ce serait sympa.

Reply

Marsh Posté le 10-04-2013 à 01:05:10   

Reply

Marsh Posté le 10-04-2013 à 02:26:28    

struct {
    truc *(tab[7]);
}machin;

 

machin est un struct dont le champ tab est un tableau de 7 pointeurs sur des truc.
Si tu as des pointeurs sur différents types dans ton tableau, tu fais
void *(tab[7]); et tu castes.

 

Autre possibilité, déclarer tes types pointeurs sur différentes choses dans une union:
typedef union {
 bidule  *bid;
 chose *choz;
    } truc;

 

struct {
    truc tab[7];
} machin;

 

Concrètement, un exemple de chaque technique:

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     struct {
  5.         void *(tab[2]);
  6.     } machin;
  7.     int a = 3;
  8.     char b = 'A';
  9.     machin.tab[0] = (void *) &a;
  10.     machin.tab[1] = (void *) &b;
  11.     printf("%d %c\n",  *(int *)machin.tab[0], *(char *)machin.tab[1]);
  12.    
  13.     return 0;
  14. }
 
Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     typedef union {
  5.         int  *pint;
  6.         char *pchar;
  7.     } truc;
  8.     struct {
  9.         truc tab[2];
  10.     } machin;
  11.     int a = 3;
  12.     char b = 'A';
  13.     machin.tab[0].pint = &a;
  14.     machin.tab[1].pchar = &b;
  15.     printf("%d %c\n",  *machin.tab[0].pint, *machin.tab[1].pchar);
  16.    
  17.     return 0;
  18. }


La seconde solution permet au compilo de mieux faire son boulot de vérification du bon typage.
A+,


Message édité par gilou le 10-04-2013 à 02:32:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-04-2013 à 21:24:07    

j'ai réussi à faire ce que je voulais faire grâce à ta réponse (un amas de listes chainées qui s'entrecroisent, c'est pour un jeu).
 
merci bcp !


Message édité par archseven le 10-04-2013 à 21:24:26
Reply

Sujets relatifs:

Leave a Replay

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