Soy bastante nuevo en C y tengo algunos problemas con todas las cosas del puntero.typedef struct puntero definición
de escribir este código:
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;
consigo un error de esta manera y simplemente no puedo entender por qué.
Sé que edgeitem
y edge
son etiquetas y puedo usar struct edge *next
pero he declarado los punteros, ¿por qué no puedo usarlos?
¿Debo utilizar * si tengo un puntero?
pEDGE_ITEM *edge_item
//or
pEDGE_ITEM edge_item
No puedo entender, es un puntero, ¿por qué agrego el *?
Y la última pregunta es: Si estoy usando lo anterior, ¿cuál es la diferencia entre:
*EDGE next
EDGE *next
y última: si estoy añadiendo:
typedef struct edge_list
{
EDGE *head;
}EDGE_LIST;
es es lo mismo que:
pEDGE head;
En general, se considera un mal estilo para ocultar un '*' detrás de un typedef. Solo puede conducir a la confusión. Los programadores leen * cosa más rápido que pThing. Lo mismo ocurre con otros elementos de sintaxis, como '#define AND &&', etcétera. En resumen: no lo hagas. – wildplasser