Sono abbastanza nuovo in C e ho qualche problema con tutte le cose del puntatore.typedef struct pointer definition
ho scritto questo codice:
typedef struct edgeitem
{
double weight;
}EDGE_ITEM, *pEDGE_ITEM; //also declaration of a pointer
/************ edge that includes a pointer to the edge item, next and prev ******/
typedef struct edge
{
pEDGE_ITEM *edge_item;
pEDGE *next; //pointer to next edge
pEDGE *prev; //pointer to prev edge
}EDGE, *pEDGE;
ottengo un errore in questo modo e solo riesco a capire perché.
So che edgeitem
e edge
sono tag e posso usare struct edge *next
ma ho dichiarato i puntatori quindi come mai non posso usarli?
Devo usare * se ho un puntatore?
pEDGE_ITEM *edge_item
//or
pEDGE_ITEM edge_item
Non capisco, è un puntatore, quindi perché devo aggiungere il *?
E l'ultima domanda è: Se sto usando quanto sopra, qual è la differenza tra:
*EDGE next
EDGE *next
e ultimo: se sto aggiungendo:
typedef struct edge_list
{
EDGE *head;
}EDGE_LIST;
è è lo stesso di:
pEDGE head;
Generalmente è considerato uno cattivo stile nascondere un '*' dietro un typedef. Può solo portare a confusione. I programmatori leggono * cosa più velocemente di pThing. Lo stesso vale per altri elementi di sintassi, come '#define AND &&', eccetera. In breve: non farlo. – wildplasser