• [^] # Re: .

    Posté par . En réponse au message Pointeurs et structures. Évalué à 7.

    Arrgggg je viens de passer 30 min a pondre un pave pour essayer de t'expliquer ca et je me suis rendu compte que ca t'embrouillerai plus la tete qu'autre chose.
    • Pour faire simple, pour un tableau T contenant n variable de structure S telle que:
      struct S
      {
       int v;
      }
      
    • "." s'emploie lorsque la memoire utilisee pour stocker T est allouee de maniere statique:
      struct S T[n]; /* Tableau de n variable de structure S.
       A la compilation, le compilateur sait qu'il doit reserver n blocs 
       consecutifs de memoire de taille sizeof(S), soit 4 octets sur une 
       architecture 32 bits.
       */
      
      on aura alors:
      T[0].v=0xdeadbeef+0;
      .
      .
      .
      T[n].v=0xdeadbeef+n;
      
    • "->" s'emploie lorsque la memoire utilisee pour stocker T est allouee de maniere dynamique:
      struct S *T; /* Pointeur vers une zone memoire a definir qui contiendra un nombre 
       de structure S qui est inconnu au moment de la compilation.
       */
      T=malloc(n*sizeof(S)); /* on alloue cette zone memoire pour n structures S 
       au moment de l'execution du programme.
       */
      
      on aura alors:
      T[0]->v=0xdeadbeef+0;
      .
      .
      .
      T[n]->v=0xdeadbeef+n;
      
      La difference se fait dans la maniere dont le programme va chercher ses donnees:
    • "." indique que les donnees se trouvent directement a la suite de l'adresse memoire T.
    • "->" indique que les donnees se trouvent a l'adresse qui est stockee à l'adresse memoire T.
    • Je ne sais pas si j'ai ete suffisament clair, mais a cette heure ci c'est tout ce que je peux faire !
    • PS: ce systeme de balise sans retour chariot est vraiment tout pourrite!