2011-10-29 9 views
12
struct node 
{ 
    int coef; 

    int exp; 

    struct node *link; 
}; 

typedef struct node *NODE; 
+6

Si prega di non nascondere tipi di puntatore dietro typedef nel codice vera, anche se . –

+2

cattivo gusto. SCNR – ninjalj

+0

quale sarebbe il modo migliore per scrivere questo codice. Nella struttura del libro è usato in 3 o 4 modi ... – Skr

risposta

7

Fa NODE un typedef per un struct node *.

+1

quale sarebbe un modo migliore per scrivere questo codice ... mantenendo lo stesso significato. – Skr

+3

Un modo migliore sarebbe quello di omettere il typedef e fare riferimento al tipo di puntatore come 'struct node *'. –

18

Definisce NODE come sinonimo per il tipo di struct node *, così quando sarai dichiarare una variabile di tipo NODE sarete in realtà dichiarando un puntatore a struct node.

Personalmente, non penso che tale dichiarazione sia una buona idea: stai "nascondendo un puntatore" (che è quasi sempre una cattiva idea), e, inoltre, non stai mettendo in evidenza questo fatto in alcun modo nel nuovo nome.

+4

+1 per "Non nascondere i tipi di puntatore dietro un typedef" –

+1

+1 per lo stesso motivo. Dargli il nome di 'nodeptr' invece di' node' sarebbe d'aiuto, ma poi non c'è alcun motivo per "digitarlo" del tutto. –

+1

"Non nascondere i tipi di puntatore dietro un typedef" cosa intendi con questo – Skr

7

NODE diventa uno pseudonimo per struct node*.


EDIT: Okay, per il commento (se scrivo la mia risposta come commento, sarebbe troppo lungo e non formattato):

Non c'è modo diverso di scrivere questo. Qui, typedef viene utilizzato solo per creare un sinonimo/alias per il puntatore a struct node.
Un esempio per l'uso sarebbe:

void f() 
{ 
    // some code 
    NODE p = NULL; 
    // do something with p 
    // for example use malloc and so on 
    // like: p = malloc(sizeof(struct node)); 
    // and access like: p->coef = ..; p->expr = .. 
    // do something with p and free the memory later (if malloc is used) 
} 

è lo stesso di

void f() 
{ 
    // some code 
    struct node* p = NULL; 
    // do something with p 
} 

Utilizzando NODE rende solo più breve (in ogni caso, non vi consiglio come typedef, come ti stai nascondendo, che è un puntatore , non un struct o altro tipo, come menzionato nella risposta di @Matteo Italia).


Il formato, ti riferisci: "typedef struct {} formato nome_tipo" è un'altra cosa. È una specie di trucco in C, per evitare di scrivere la parola chiave struct (poiché è obbligatoria in C e NON in C++). Così

typedef struct node 
{ 
    //.. 
} NODE; 

renderebbe NODE alias per struct node. Così, lo stesso esempio di sopra:

void f() 
{ 
    // some code 
    NODE p; 
    // do something with p 
    // note that now p is automatically allocated, it's real struct 
    // not a pointer. So you can access its members like: 
    // p.coef or p.expr, etc. 
} 

è lo stesso di

void f() 
{ 
    // some code 
    struct node p; 
    // do something with p 
} 

NOTA che ora, p è NON un puntatore, è struct node.

+0

puoi scrivere lo stesso codice in modo diverso. come scrivere lo stesso codice in typedef struct {} tipo_nome; formato??? – Skr

+0

Bene, guarda la mia modifica, spero che sia più chiara. –

+0

grazie mille, ho capito questa volta. – Skr

-3

cosa indica typedef struct node *NODE?

IT INDICA una persona che non ha imparato che MAIUSCOLO non va bene

Reserve maiuscolo identificatori per MACRO.

Acclamazioni & hth.,

+0

Inoltre, non penso sia una buona idea lasciare che 'NODE' contenga' * ' –

+0

@ PeterLee: Grazie, non ho pensato di menzionarlo. Hmm, trovo curioso che la risposta più promossa sia quella che * non * risponde alla domanda su cosa questo "indica", e che questa risposta, l'unica che ha risposto alla domanda, è stata downvoted. Questo è così. –

+0

Anche se sei molto solido e bello. Anche se hai buoni consigli per il caso. Non è una buona idea umiliare le persone. B.t.w. non è una risposta appropriata per la domanda. Questa è la causa principale di downvotare la risposta. – I159

0

dice semplicemente è possibile creare puntatore del tipo di nodo utilizzando solo NODE ogni volta, invece di scrittura nodo struct * ogni

Problemi correlati