Jestem całkiem nowy w C i mam pewne problemy ze wszystkimi wskaźnikami.typedef struct pointer definition
Napisałem ten kod:
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;
pojawia się błąd ten sposób i po prostu nie mogę zrozumieć, dlaczego.
Wiem, że edgeitem
i edge
są znacznikami i mogę używać struct edge *next
, ale zadeklarowałem wskaźniki, więc dlaczego nie mogę ich użyć?
Czy muszę użyć *, jeśli mam wskaźnik?
pEDGE_ITEM *edge_item
//or
pEDGE_ITEM edge_item
Nie mogę zrozumieć, to wskaźnik, dlaczego więc dodaję *?
I ostatnie pytanie brzmi: Jeśli używam powyższego, jaka jest różnica pomiędzy:
*EDGE next
EDGE *next
i ostatni: jeśli Dodaję:
typedef struct edge_list
{
EDGE *head;
}EDGE_LIST;
jest to samo co:
pEDGE head;
Powszechnie uważa się, że zły styl polega na ukrywaniu "*" za typedef. Może tylko doprowadzić do zamieszania. Programiści czytają * coś szybciej niż pThing. To samo dotyczy innych elementów składni, takich jak '#define AND &&', et cetera. W skrócie: nie rób tego. – wildplasser