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!
[^] # Re: .
Posté par Anonyme . En réponse au message Pointeurs et structures. Évalué à 7.
struct S { int v; }