2010-03-30 6 views
0

BIG EDIT:Passer une structure dynamique par référence? [C]

Ok, ma première question ne m'a pas aidé. Voici une seconde partie.

Mon struct ressemble à ceci:

struct node { 
    char *name; 
    int age; 
    struct node *nextName; 
    struct node *nextAge; 
}; 

Je dois faire deux listes chaînées de structures comme celle-ci ,. J'ai donc 'rootAges' qui garde la trace de l'endroit où commence la liste basée sur l'âge et 'rootNames' qui garde la trace de l'endroit où les noms commencent. Je n'arrive pas à les mettre à jour.

c'est-à-dire, j'ai struct node * rootAges et struct node * rootNames. Je dois passer les deux à une fonction qui ajoute les éléments à la liste. Mais j'ai aussi besoin des racines pour changer quand j'ajoute des choses à la liste. les méthodes fournies jusqu'ici, n'ont pas changé la valeur de rootAges par exemple dans la fonction principale, quand elle est modifiée dans la fonction add.

Merci!

Répondre

5

Vous passez l'adresse de l'instance d'une structure à une fonction qui accepte un pointeur en C.

void fn(struct data *p) 
{ 
    if(p) 
    p->x = 33; 
} 

//... main ... 
struct data d; 
fn(&d); 
//d.x == 33 
1

passer un pointeur sur la structure.

Par exemple:

typedef struct data{ int x;} s_data; 

void foo (s_data* pointer){} 

s_data s={0}; 
foo(&s); 
0

Déclaration

void Foo(struct data *); 

Définition

void Foo(struct data *p) 
{ 
//body 
} 

Dans votre code

Foo(root); 
Questions connexes