我对 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
and 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;
您不能在结构体的定义中使用 plEDGE。你应该做类似的事情:
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;
But
pEDGE_ITEM *edge_item;
相当于
struct edgeitem **edge_item;
EDGE_ITEM **edge_item;
About *EDGE next
那是错误的语法。正确的语法是EDGE* next
or pEDGE next
。那么一次struct edge
已定义,您可以使用这两个中的任何一个,但是在定义结构时,您必须按照我在答案开头所示的方式进行操作。
是的,以下两个定义是等效的:
typedef struct edge_list {
EDGE *head;
} EDGE_LIST;
typedef struct edge_list {
pEDGE head;
} EDGE_LIST;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)