2008-11-13 7 views
1
typedef struct { 
     nat id; 
     char *data; 
     } element_struct; 

typedef element_struct * element; 

void push(element e, queue s) { 
     nat lt = s->length; 
     if (lt == max_length - 1) { 
       printf("Error in push: Queue is full.\n"); 
       return; 
     } 
     else { 
       s->contents[lt] = e; 
       s->length = lt + 1; 
     } 
} 
int main() { 
     push(something_of_type_element, s); 
} 

Comment procéder pour formater "something_of_type_element"?Passer une valeur avec le type struct dans une fonction dans C

Merci

Remarques: nat est le même que int

+1

Ceci est juste mon opinion, mais je pense que c'est plutôt déroutant de typedef un type de pointeur. Par souci de clarté, je ne ferais que typedef la structure. De cette façon, quelqu'un lisant votre code saura qu'un pointeur est traité sans avoir déjà besoin de connaître le typedefs. – jdizzle

Répondre

1

Vous aimez cette :

element_struct foo = { 1, "bar" }; 
push(&foo, s); 

Si vous avez un compilateur C99 vous pouvez le faire:

element_struct foo = { 
    .id = 1, 
    .data = "bar" 
}; 
push(&foo, s); 

Notez que les données de la structure doivent être copiées si elle a besoin de vivre plus longtemps que le champ dans lequel il a été défini. Sinon, la mémoire peut être allouée sur le tas avec malloc (voir ci-dessous), ou une variable globale ou statique peut être utilisée.

element_struct foo = malloc(sizeof (element_struct)); 

foo.id = 1; 
foo.data = "bar"; 
push(foo, s); 
+0

Cela va se comporter très bizarrement une fois que vous allez utiliser le contenu de la file d'attente en dehors de la fonction qui appelle push(), car la structure définie comme ceci va vivre sur sa pile et être détruite une fois la fonction terminée. – che

3

Que diriez-vous:

element elem = malloc(sizeof(element_struct)); 
if (elem == NULL) { 
    /* Handle error. */ 
} 

elem->id = something; 
elem->data = something_else; 

push(elem, s); 

Notez qu'il ya beaucoup de gestion de la mémoire manque ici ...

Questions connexes