我是C中的新手,并且在所有指针内容方面都存在一些问题.
我写了这段代码:
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;
我这样得到一个错误,只是无法理解为什么.
我知道edgeitem和edge是标签,我可以使用struct edge * next但是我声明了指针所以为什么我不能使用它们?
如果我有指针,我需要使用*吗?
pEDGE_ITEM *edge_item //or pEDGE_ITEM edge_item
我不明白,这是一个指针,为什么我要添加*?
最后一个问题是:
如果我使用上面的内容,有什么区别:
*EDGE next EDGE *next
最后一个:
如果我要补充:
typedef struct edge_list { EDGE *head; }EDGE_LIST;
是这样的:
pEDGE head;
解决方法
您不能在结构的定义中使用pEDGE.你应该这样做:
typedef struct edge { pEDGE_ITEM *edge_item; struct edge *next; //pointer to next edge struct edge *prev; //pointer to prev edge } EDGE,*pEDGE;
您还必须注意edge_item是一个双指针.你也在你的问题中提到了这一点.因此,如果您使用pEDGE_ITEM并且您只想拥有一个普通指针,则不应该编写pEDGE_ITEM * edge_item而只需编写pEDGE_ITEM edge_item.
为澄清,以下所有声明均相同:
struct edgeitem *edge_item; EDGE_ITEM *edge_item; pEDGE_ITEM edge_item;
但
pEDGE_ITEM *edge_item;
相当于
struct edgeitem **edge_item; EDGE_ITEM **edge_item;
关于* EDGE接下来是错误的语法.正确的语法是EDGE * next或pEDGE next.因此,一旦定义了struct edge,你就可以使用这两者中的任何一个,但是在定义struct时,你必须按照我在答案开头展示的那样做.
是的,以下两个定义是等效的:
typedef struct edge_list { EDGE *head; } EDGE_LIST; typedef struct edge_list { pEDGE head; } EDGE_LIST;