typedef结构指针定义(typedef struct pointer definition)

2019-09-17 13:18发布

我用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;

我得到一个错误这样的,只是不能明白为什么。

我知道edgeitemedge的标签,我可以使用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;

Answer 1:

你不能在结构的定义中使用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* nextpEDGE next 。 因此,一旦struct edge定义你可以使用任何这两种,但在定义结构,你必须这样做,因为我显示了在我的答案的开始。

是的,下面的两个定义是等价的:

typedef struct edge_list {
    EDGE        *head;
} EDGE_LIST;

typedef struct edge_list {
    pEDGE        head;
} EDGE_LIST;


Answer 2:

您正在使用的定义之前,它是类型别名。 使用结构变量是一种变通方法:

typedef struct edge
{
    EDGE_ITEM    *edge_item;  
    struct edge  *next;      //pointer to next edge
    struct edge  *prev;      //pointer to prev edge
} EDGE;

需要注意的是,你几乎可以肯定使用了指针别名不正确,我避开他们。



Answer 3:

我想这应该能正常运行。

    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;  //<<-------  this
    typedef struct edge
    {
       pEDGE_ITEM  *edge_item;  
       pEDGE       *next;      //pointer to next edge
       pEDGE       *prev;      //pointer to prev edge
    }EDGE;


文章来源: typedef struct pointer definition