IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

tableau de pointeur pointant sur des structures.


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut tableau de pointeur pointant sur des structures.
    Bonjour,
    j'aimerais faire un tableau de pointeur pointant sur des structures.


    donc en faite avant j'avais un tableau de tableau de structures:
    j'ai la structure suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    struct
    { 
     int A;
    .....
    }t_Session
     
     
    typdef t_Session t_Sessions[N]
    ...
     
    t_Sessions a_Sessions
    {
     initialisation pour 0
    ....
     initialisation pour N-1
    }
    ------
    Maintenant je voudras passer par des pointers
    et je déclare:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typdef t_Session *p_Sessions[N]
     
     
    p_Sessions *a_Sessions
    {
    initialisation 0
    initialisation N-1
    }
    est ce que cela fonctionne?me manque-t-til quelque chose?
    Merci de votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    216 messages pas de balise code ?!!!

    Bon !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct
    {
    int A;
    .....
    }t_Session
     
    typdef t_Session t_Sessions[N]
    Ton premier code sans pointeur je pense pas qu'il compilait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct t_Session
    {
      int A;
      /* ... */
    };
     
    typedef struct t_Session t_Sessions[N];

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Pour repondre à ta question comme tu aura un tableau de pointeur en plus de l'initialisation il va falloir penser aussi à l'allocation.

    Essais dans la mesure du possible de poster des morceaux de code qui compile !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut
    dsl mais pour le tableau de pointeurs sur la structure la déclaration se fait comment et l'initialisation se fait comment?
    Merci de votre aide

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Maintenant je voudras passer par des pointers
    et je déclare:
    typdef t_Session *p_Sessions[N]
    Là tu n'était pas bien loin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct t_Session
    {
      int A;
      /* ... */
    };
     
    typedef struct t_Session *p_Sessions[N];
    mais pour le tableau de pointeurs sur la structure la déclaration se fait comment et l'initialisation se fait comment?
    Un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int i;
    p_Sessions a_Sessions;
     
    for(i=0; i<N; i++)
      {
         /* allocation */
         a_Sessions[i] = malloc(sizeof(struct t_Session));
         /* initialisation */ 
         a_Sessions[i]->A = 10;
      }
     
    for(i=0; i<N; i++)
      printf("Valeur de a_Sessions[%d]->A : %d\n", i, a_Sessions[i]->A );
    Il faut prévoir les tests sur les retours des malloc en cas d'echec de l'allocation.

    Et ne pas oublier de libérer la mémoire allouée quand tu n'en a plus besoin.

    Le fait d'utiliser des typedef pour tes tableaux n'est peut-être pas une bonne idée si tu n'est pas trop d'accord avec les pointeurs.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut
    Merci de ton aide.
    je voudrais tester ce tableau de pointeurs avant d'effectuer l'allocation.
    En fait je voudrais pourvoir tester si le 1er element est déja alloué ou non. si il est deja alloué, je vais à l'élément 2 etc...

    Comment dois je m'y prendre pour faire cette manip?

    Merci de votre aide.

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    je voudrais tester ce tableau de pointeurs avant d'effectuer l'allocation.
    ?? je ne comprend pas ce que tu veux faire ?

    Avant l'allocation ton tableau de pointeur à des élément non initialisé, c'est à dire qui pointe n'importe où ! tu ne doit donc pas les utiliser tant qu'il ne pointe pas sur un espace mémoire valide.

    Tu devrais consulter un cours sur les pointeurs, les tableaux ....

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut
    En faite je vais appeler une fonction qui va faire l'allocation. Quand j'appelerais cette fonction je veux allouer au bon endroit dasn mon tableau de pointeurs. Je ne veux pas écraser la 1ere allocation.

    Je pensais faire comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    my_fonction_allocation{
    while((a_Sessions[i]!=NULL)&&(i<N))
      	{
      	 i++;
      	}
     
    /*Tant que je ne pointe pas sur un élément null j'incremente*/		
     
    if(a_Sessions[i]==NULL)
    {/* Allocation */
        a_Sessions[i] = malloc(sizeof(struct t_Session));
     
    }	
     
    }
    GLOBAL p_Sessions a_Sessions
    = {
       { NULL }     /* 1rst  instance	*/
      ,{ NULL } 	/* 2nd  instance	*/
      ,{ NULL }	 	/* 3rd  instance	*/
      ,{ NULL }  	/* 4th  instance	*/
      ,{ NULL }  	/* 5th  instance	*/
      ,{ NULL }  	/* 6th  instance	*/
      ,{ NULL }  	/* 7th  instance	*/
      ,{ NULL } 	/* 8th  instance	*/
      ,{ NULL }  	/* 9th  instance	*/
      ,{ NULL }  	/* 10th  instance	*/
    }

  9. #9
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Quelques remarques sur cette ébauche de code :

    - La fonction my_fonction_allocation devrait prendre en argument le tableau de pointeur et le nombre d'éléments de ce tableau et renvoyer, par exemple, le pointeur obtenu par le malloc (ce qui permet à l'appelant de savoir si l'allocation a réussi et si il y avait une place suffisante dans le tableau pour la placer)

    - if(a_Sessions[i]==NULL).... La condition est insuffisante, puisqu'elle ne détecte pas si le tableau est plein (i==N)

    On devrait avoir quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct t_Session * my_fonction_allocation ( p_Sessions a_Sessions, int N)
    {
       int i;
       for(i=0; i<N && a_Sessions[i] != NULL ;i++){}
       if(i<N) a_Sessions[i] = malloc(sizeof(struct t_Session));
       return i<N ? a_Sessions[i] : NULL ;
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut
    Y aurait-il une doc interessante sur les tableaux de pointeurs pointant vers les structures?
    Merci.

  11. #11
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    A ma connaissance, non.

    En fait, la raison est que les tableaux de pointeurs sur structures ou pointeurs sur autre chose se comportent sans particularités spéciales par rapport à des tableaux de n'importe quoi (sauf peut-être pour des tableaux de tableaux, c'est à dire des tableaux de dimension supérieure à 1)
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. WebView : charger une page distante pointant sur des ressources locales
    Par props dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 04/05/2011, 17h58
  2. Réponses: 21
    Dernier message: 03/06/2010, 18h26
  3. Réponses: 6
    Dernier message: 16/11/2007, 21h09
  4. Réponses: 6
    Dernier message: 15/12/2006, 13h55
  5. Operations bit à bit sur des structures
    Par DarkNagash dans le forum C
    Réponses: 4
    Dernier message: 16/03/2006, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo