c - typedef 结构指针定义

标签 c pointers struct typedef declaration

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

最佳答案

您不能在结构定义中使用 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;

关于c - typedef 结构指针定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10768947/

相关文章:

c - 如何计算字符串中字符的频率

c - c中的volatile和指针变量之间的区别

c++ - 想要在 C++ 中创建一个存储 Nx3 值的 2D 指针

c++ - 在 C++ 中按结构成员对列表进行排序

C90 和类型定义

c++ - 在结构体中设置函数

c - 嵌套函数的实现

c - scanf 不接受所有输入

c - 如何在C中的结构中的双指针中使用malloc()

C:指针算术的评估:操作何时完成?