我是 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 next
这是错误的语法。正确的语法是 EDGE* next
或 pEDGE next
。因此,一旦定义了 struct edge
,您就可以使用这两者中的任何一个,但是在定义结构时,您必须按照我在答案开头显示的那样进行操作。
是的,下面两个定义是等价的:
typedef struct edge_list {
EDGE *head;
} EDGE_LIST;
typedef struct edge_list {
pEDGE head;
} EDGE_LIST;
关于c - typedef 结构指针定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10768947/